+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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/doc/Readme.md b/doc/Readme.md
index 402477c8..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**
---|--|--
-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
+
+**Nombre** | **Grupo** | **Github**
+--|--|--
+Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg)
+Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42)
+Manuel S. Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias)
+
+## Uso del compilador
+
+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.pdf b/doc/report/report.pdf
new file mode 100644
index 00000000..16c6d60b
Binary files /dev/null and b/doc/report/report.pdf differ
diff --git a/doc/s-mips.pdf b/doc/s-mips.pdf
new file mode 100644
index 00000000..93db8793
Binary files /dev/null and b/doc/s-mips.pdf differ
diff --git a/doc/test.py b/doc/test.py
new file mode 100644
index 00000000..e69de29b
diff --git a/requirements.txt b/requirements.txt
index 9eb0cad1..f23029c8 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,3 @@
-pytest
-pytest-ordering
+pytest
+pytest-ordering
+ply
diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml
new file mode 100644
index 00000000..20a1491f
--- /dev/null
+++ b/src/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml
new file mode 100644
index 00000000..7210df4d
--- /dev/null
+++ b/src/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/src.iml b/src/.idea/src.iml
new file mode 100644
index 00000000..16a935cb
--- /dev/null
+++ b/src/.idea/src.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml
new file mode 100644
index 00000000..2e3f6920
--- /dev/null
+++ b/src/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/workspace.xml b/src/.idea/workspace.xml
new file mode 100644
index 00000000..41da10ff
--- /dev/null
+++ b/src/.idea/workspace.xml
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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/__init__.py b/src/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py
new file mode 100644
index 00000000..055a4f8a
--- /dev/null
+++ b/src/codegen/__init__.py
@@ -0,0 +1,26 @@
+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:
+ print('============= TRANSFORMING TO CIL =============')
+ cool_to_cil = COOLToCILVisitor(context)
+ cil_ast = cool_to_cil.visit(ast, scope)
+ if debug:
+ formatter = get_formatter()
+ 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)
+ 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)
+ if debug:
+ print(text)
+ 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
new file mode 100644
index 00000000..5e35dcee
Binary files /dev/null and b/src/codegen/__pycache__/__init__.cpython-37.pyc differ
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 00000000..710ce862
Binary files /dev/null and b/src/codegen/__pycache__/cil_ast.cpython-37.pyc differ
diff --git a/src/codegen/__pycache__/pipeline.cpython-37.pyc b/src/codegen/__pycache__/pipeline.cpython-37.pyc
new file mode 100644
index 00000000..f0470319
Binary files /dev/null and b/src/codegen/__pycache__/pipeline.cpython-37.pyc differ
diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py
new file mode 100644
index 00000000..177bdc67
--- /dev/null
+++ b/src/codegen/cil_ast.py
@@ -0,0 +1,358 @@
+class Node:
+ pass
+
+class ProgramNode(Node):
+ def __init__(self, dottypes, dotdata, dotcode, idx=None):
+ self.dottypes = dottypes
+ self.dotdata = dotdata
+ self.dotcode = dotcode
+ self.index = idx
+
+class TypeNode(Node):
+ def __init__(self, name, atributes=None, methods=None, idx=None):
+ self.name = name
+ self.attributes = atributes if atributes is not None else []
+ self.methods = methods if methods is not None else []
+ self.index = idx
+
+class DataNode(Node):
+ def __init__(self, vname, value, idx=None):
+ self.name = vname
+ self.value = value
+ self.index = idx
+
+
+class FunctionNode(Node):
+ def __init__(self, fname, params, localvars, instructions, idx=None):
+ self.name = fname
+ self.params = params
+ self.localvars = localvars
+ self.instructions = instructions
+ self.index = idx
+
+class ParamNode(Node):
+ def __init__(self, name, typex, idx=None):
+ self.name = name
+ self.type = typex
+ 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
+ self.in2 = None
+ self.out = None
+ self.index = idx
+
+class AssignNode(InstructionNode):
+ def __init__(self, dest, source, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.source = source
+
+ self.in1 = source
+ self.out = dest
+
+class UnaryNode(InstructionNode):
+ def __init__(self, dest, expr, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.expr = expr
+
+ self.in1 = expr
+ self.out = dest
+
+class NotNode(UnaryNode):
+ pass
+
+class LogicalNotNode(UnaryNode):
+ pass
+
+class BinaryNode(InstructionNode):
+ def __init__(self, dest, left, right, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.left = left
+ self.right = right
+
+ self.in1 = left
+ 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, 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
+
+class SetAttribNode(InstructionNode):
+ 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
+
+ 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)
+ self.type = itype
+ self.dest = dest
+
+ self.out = dest
+
+class ArrayNode(InstructionNode):
+ pass
+
+class TypeOfNode(InstructionNode):
+ def __init__(self, obj, dest, idx=None):
+ super().__init__(idx)
+ self.obj = obj
+ self.dest = dest
+
+ 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
+
+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)
+ 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, 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 = obj
+
+class ArgNode(InstructionNode):
+ def __init__(self, name, idx=None):
+ super().__init__(idx)
+ self.dest = name
+
+ self.out = name
+
+class ReturnNode(InstructionNode):
+ def __init__(self, value, idx=None):
+ super().__init__(idx)
+ self.value = value
+
+ self.out = value
+
+class LoadNode(InstructionNode):
+ def __init__(self, dest, msg, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.msg = msg
+
+ self.out = dest
+
+class LengthNode(InstructionNode):
+ def __init__(self, dest, arg, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.arg = arg
+
+ self.out = dest
+ self.in1 = arg
+
+class ConcatNode(InstructionNode):
+ def __init__(self, dest, arg1, arg2, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.arg1 = arg1
+ self.arg2 = arg2
+
+ self.out = dest
+ self.in1 = arg1
+ self.in2 = arg2
+
+class PrefixNode(InstructionNode):
+ def __init__(self, dest, word, n, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.word = word
+ self.n = n
+
+ self.out = dest
+ self.in1 = word
+ self.in2 = n
+
+class SubstringNode(InstructionNode):
+ def __init__(self, dest, word, begin, end, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.begin = begin
+ self.word = word
+ self.end = end
+
+ self.out = dest
+ self.in1 = begin
+ self.in2 = end
+
+class ToStrNode(InstructionNode):
+ def __init__(self, dest, ivalue, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.ivalue = ivalue
+
+ self.out = dest
+ self.in1 = ivalue
+
+class OutStringNode(InstructionNode):
+ def __init__(self, value, idx=None):
+ super().__init__(idx)
+ self.value = value
+
+ self.in1 = value
+
+class OutIntNode(InstructionNode):
+ def __init__(self, value, idx=None):
+ super().__init__(idx)
+ self.value = value
+
+ self.in1 = value
+
+class ReadStringNode(InstructionNode):
+ def __init__(self, dest, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+
+ self.out = dest
+
+class ReadIntNode(InstructionNode):
+ def __init__(self, dest, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+
+ self.out = dest
+
+class ExitNode(InstructionNode):
+ 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):
+ super().__init__(idx)
+ self.dest = dest
+ self.source = source
+
+ 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
+
+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
+
+class BoxingNode(InstructionNode):
+ def __init__(self, dest, type_name, idx=None):
+ super().__init__(idx)
+ self.dest = dest
+ self.type = type_name
+
+ self.out = dest
diff --git a/src/codegen/cil_built_in.py b/src/codegen/cil_built_in.py
new file mode 100644
index 00000000..28486b29
--- /dev/null
+++ b/src/codegen/cil_built_in.py
@@ -0,0 +1,3 @@
+
+from codegen.cil_ast import *
+
diff --git a/src/codegen/tools.py b/src/codegen/tools.py
new file mode 100644
index 00000000..6430a883
--- /dev/null
+++ b/src/codegen/tools.py
@@ -0,0 +1,216 @@
+from typing import List, Dict
+from enum import Enum
+from collections import OrderedDict
+import re
+
+class SymbolTabEntry:
+ def __init__(self, name, is_live=False, next_use=None):
+ self.name = name
+ self.is_live = is_live
+ self.next_use = next_use
+
+class SymbolTable:
+ def __init__(self, entries:List[SymbolTabEntry]=None):
+ values = entries if entries is not None else []
+ self.entries = {v.name: v for v in values}
+
+ def lookup(self, entry_name: str) -> SymbolTabEntry:
+ if entry_name != None:
+ if entry_name in self.entries.keys():
+ 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]
+
+ 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 AddrType(Enum):
+ REF = 1,
+ STR = 2,
+ BOOL = 3,
+ INT = 4,
+ VOID = 5
+
+class AddressDescriptor:
+ 'Stores the location of each variable'
+ def __init__(self):
+ self.vars = {}
+
+ def insert_var(self, name, address, register=None, stack=None):
+ 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] = 4*addr
+
+ def get_var_reg(self, var):
+ return self.vars[var][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 RegisterType(Enum):
+ TEMP = 0
+ GLOBAL = 1
+ ARG = 2
+ RETURN = 3
+
+class RegisterDescriptor:
+ 'Stores the contents of each register'
+ def __init__(self):
+ 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}
+
+ 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 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
+
+
+class DispatchTable:
+ def __init__(self):
+ self.classes = OrderedDict()
+ self.regex = re.compile(r'function_(.+)_\w+')
+
+ def add_class(self, type_name, methods):
+ self.classes[type_name] = methods
+
+ def get_offset(self, type_name, method):
+ return self.classes[type_name].index(method)
+
+ def find_full_name(self, type_name, mth_name):
+ for meth in self.classes[type_name]:
+ # format of methods: 'function_{method_name}_{type_name}'
+ name = self.regex.search(meth).groups()[0]
+ if name == mth_name:
+ return meth
+ return None
+
+ def get_methods(self, type_name):
+ "Returns all the methods of a specific type"
+ return self.classes[type_name]
+
+ 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]
+
+ def __iter__(self):
+ return iter(self.objects.values())
\ 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
new file mode 100644
index 00000000..d6d1e3f4
Binary files /dev/null and b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc differ
diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc
new file mode 100644
index 00000000..662e8c14
Binary files /dev/null and b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc differ
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 00000000..bacd2a9c
Binary files /dev/null and b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc differ
diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py
new file mode 100644
index 00000000..5c3e191e
--- /dev/null
+++ b/src/codegen/visitors/base_cil_visitor.py
@@ -0,0 +1,284 @@
+from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode
+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, ProgramNode
+import re
+
+class BaseCOOLToCILVisitor:
+ def __init__(self, context):
+ self.dottypes = []
+ self.dotdata = []
+ self.dotcode = []
+ self.current_type: Type = None
+ self.current_method: Method = None
+ self.current_function = None
+ self.context: Context = context
+ self.idx = 0
+ # self.name_regex = re.compile('local_[^_]+_[^_]+_(.+)_\d+')
+ self.constructors = []
+ self.void_data = None
+ self.inherit_graph = {}
+
+ @property
+ def index(self):
+ i = self.idx
+ self.idx += 1
+ return i
+
+ @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, 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 vname
+
+ 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):
+ return self.register_local('internal')
+
+ def register_instruction(self, instruction):
+ self.instructions.append(instruction)
+ instruction.index = self.index
+ 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 to_var_name(self, var_name):
+ regex = re.compile(f'local_{self.current_function.name[9:]}_(.+)_\d+')
+ for node in reversed(self.localvars):
+ m = regex.match(node.name).groups()[0]
+ if m == var_name:
+ return node.name
+ for node in self.params:
+ if node.name == var_name:
+ return var_name
+ return None
+
+ def register_function(self, function_name):
+ function_node = FunctionNode(function_name, [], [], [], self.index)
+ 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.index)
+ 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 initialize_attr(self, constructor, attr: Attribute, scope: Scope):
+ 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("")))
+ else:
+ constructor.body.expr_list.append(AssignNode(attr.name, ConstantVoidNode(atrr.name)))
+
+ def create_built_in(self):
+
+ # ---------------------------------- 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(f1_params[0].name, idx=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 = 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 = FunctionNode("function_copy_Object",f3_params,f3_localVars,f3_intructions)
+
+ # ---------------------------------- 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 = 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 = 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 = 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 = FunctionNode("function_in_string_IO",f7_params,f7_localVars,f7_intructions)
+
+ # ---------------------------------- 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 = 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 = 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 = 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 = FunctionNode("function_type_name_String",f11_params,f11_localVars,f11_intructions)
+
+ f12_params = [ParamNode("self", 'String')]
+ f12_localVars = [LocalNode("local_copy_String_result_0")]
+ f12_intructions = [cil.ConcatNode(f12_localVars[0].name, f12_params[0].name, None, self.index),
+ 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.ExitNode(f17_params[0].name, idx=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 = 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 = 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 = 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 = FunctionNode("function_copy_Bool",f16_params,f16_localVars,f16_intructions)
+
+ 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', 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', 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) ,
+ TypeNode("String", [], string_methods),
+ TypeNode('Int', [], int_methods),
+ TypeNode('Bool', [], bool_methods)]
+
+ def sort_option_nodes_by_type(self, case_list):
+ "Sort option nodes from specific types to more general types"
+ return sorted(case_list, reverse=True,
+ key=lambda x: self.context.get_depth(x.typex))
+
+ def check_void(self, expr):
+ result = self.define_internal_local()
+ self.register_instruction(cil.TypeOfNode(expr, result))
+
+ void_expr = self.define_internal_local()
+ self.register_instruction(cil.LoadNode(void_expr, self.void_data))
+ self.register_instruction(cil.EqualNode(result, result, void_expr))
+ return result
+
+ 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/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py
new file mode 100644
index 00000000..f234241b
--- /dev/null
+++ b/src/codegen/visitors/base_mips_visitor.py
@@ -0,0 +1,466 @@
+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:
+ def __init__(self, inherit_graph):
+ self.code: list = ['.text', '.globl main', 'main:']
+ self.initialize_data_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
+ self.reg_desc = RegisterDescriptor()
+ self.addr_desc = AddressDescriptor()
+
+ 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}
+
+ 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
+ self.space_idx = 0
+
+ def initialize_methods(self):
+ self.methods = []
+ # Built in methods added
+ for entry in self.obj_table:
+ entry: ObjTabEntry
+ self.methods.extend(entry.dispatch_table_entry)
+
+ def initialize_data_code(self):
+ self.data_code = ['.data']
+
+ def initialize_runtime_errors(self):
+ self.code.append('# Raise exception method')
+ self.code.append('.raise:')
+ # Waits in $a0 error msg
+ self.code.append('li $v0, 4')
+ # Prints error message
+ self.code.append('syscall')
+
+ self.code.append('li $v0, 17')
+ self.code.append('li $a0, 1')
+ # Exists
+ self.code.append('syscall\n')
+
+ self.data_code.append('zero_error: .asciiz \"Division by zero error\n\"')
+ self.data_code.append('case_void_error: .asciiz \"Case on void error\n\"')
+ self.data_code.append('dispatch_error: .asciiz \"Dispatch on void error\n\"' )
+ 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 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)
+ 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):
+ return isinstance(expr, str)
+
+ def is_int(self, expr):
+ return isinstance(expr, int)
+
+ def is_void(self, expr):
+ return isinstance(expr, VoidConstantNode)
+
+ 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 = {}
+ 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:
+ # 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.next_use
+ in1islive = entry_in1.is_live
+ else:
+ # 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)
+ if in2 is not None:
+ if entry_in2 is not None:
+ 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
+ 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):
+ if self.is_variable(inst.in1):
+ in1_reg = self.get_reg_var(inst.in1)
+ if self.is_variable(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:
+ self.update_register(inst.out, in1_reg)
+ return
+ if nu_entry.in2islive and nu_entry.in2nextuse < inst.index:
+ 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):
+ self.get_reg_var(inst.out)
+
+
+ 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 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 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) 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) 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
+ register = min(score, key=lambda x: score[x])
+
+ # register, memory, _ = self.addr_desc.get_var_storage(n_var)
+
+ self.update_register(var, register)
+ self.load_var_code(var)
+ return register
+
+ def initialize_score(self):
+ score = {}
+ for reg in self.reg_desc.registers:
+ score[reg] = 0
+ try:
+ reg = self.addr_desc.get_var_reg(self.inst.in1)
+ if reg:
+ score[reg] = 999
+ except: pass
+ try:
+ reg = self.addr_desc.get_var_reg(self.inst.in2)
+ if reg:
+ score[reg] = 999
+ except: pass
+ try:
+ reg = self.addr_desc.get_var_reg(self.inst.out)
+ if reg:
+ score[reg] = 999
+ except: pass
+ return score
+
+ def _update_score(self, score, var):
+ reg = self.addr_desc.get_var_reg(var)
+ if reg is None:
+ return
+ try:
+ score[reg] += 1
+ except:
+ score[reg] = 1
+
+ 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)
+ 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"
+ memory, register, _= self.addr_desc.get_var_storage(var)
+ self.code.append(f"sw ${register}, -{memory}($fp)")
+
+ def load_var_code(self, var):
+ "Code to load a variable from memory"
+ 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"
+ for reg in used_reg:
+ self.code.append('addiu $sp, $sp, 4')
+ self.code.append(f'lw ${reg}, ($sp)')
+
+ def empty_registers(self, save=True):
+ "Empty all used registers and saves there values to memory"
+ registers = self.reg_desc.used_registers()
+ for reg, var in registers:
+ if save:
+ self.save_var_code(var)
+ self.addr_desc.set_var_reg(var, None)
+ self.reg_desc.insert_register(reg, None)
+
+ def push_register(self, register):
+ "Pushes the register to the stack"
+ self.code.append(f'sw ${register}, ($sp)')
+ self.code.append('addiu $sp, $sp, -4')
+
+ 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 self.is_int(expr):
+ self.code.append(f'li $t9, {expr}')
+ return 't9'
+ elif self.is_variable(expr):
+ return self.addr_desc.get_var_reg(expr)
+
+ 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)
+
+ 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 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, 12')
+ 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('# Table addr is now stored in t8')
+ self.code.append('move $t8, $v0')
+ self.code.append('# Creating the dispatch table')
+ self.create_dispatch_table(ntype) # table addr is stored in $v0
+ self.code.append('sw $v0, 8($t8)')
+
+
+ # 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 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
+
+ var = self.save_reg_if_occupied('v1')
+
+ 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 $v1, 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 a0')
+ self.code.append(f'lw $a0, {offset}($v1)') # 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 $a0, {4*i}($v0)') # guardo la direccion del metodo en su posicion en el dispatch table
+ self.load_var_if_occupied(var)
+
+ 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
+
+ def save_reg_if_occupied(self, 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(self, var):
+ if var is not None:
+ self.code.append(f'# Restore the variable of {var}')
+ 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)
+
+ var = 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(var)
+ 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, 8(${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
+
+ 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_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py
new file mode 100644
index 00000000..fdb3ef32
--- /dev/null
+++ b/src/codegen/visitors/cil_format_visitor.py
@@ -0,0 +1,193 @@
+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(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(VoidConstantNode)
+ def visit(self, node: VoidConstantNode):
+ return f'{node.obj} = Void'
+
+ @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(LessEqNode)
+ def visit(self, node: LessEqNode):
+ return f'{node.dest} = {node.left} <= {node.right}'
+
+ @visitor.when(LessNode)
+ def visit(self, node: LessNode):
+ return f'{node.dest} = {node.left} < {node.right}'
+
+ @visitor.when(EqualNode)
+ def visit(self, node: StarNode):
+ 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(GotoNode)
+ def visit(self, node: GotoNode):
+ return f'GOTO {node.label}'
+
+ @visitor.when(GotoIfNode)
+ def visit(self, node: GotoIfNode):
+ return f'IF {node.cond} GOTO {node.label}'
+
+ @visitor.when(GotoIfFalseNode)
+ def visit(self, node: GotoIfFalseNode):
+ return f'IF NOT {node.cond} GOTO {node.label}'
+
+ @visitor.when(LabelNode)
+ def visit(self, node: LabelNode):
+ return f'LABEL {node.label}'
+
+ @visitor.when(StaticCallNode)
+ def visit(self, node: StaticCallNode):
+ 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):
+ return f'{node.dest} = LOAD {node.msg}'
+
+ @visitor.when(DynamicCallNode)
+ def visit(self, node: DynamicCallNode):
+ 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):
+ return f'ARG {node.dest}'
+
+ @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}'
+
+ @visitor.when(SetAttribNode)
+ 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}'
+
+ @visitor.when(ConformsNode)
+ def visit(self, node: ConformsNode):
+ return f'{node.dest} = CONFORMS {node.expr} {node.type}'
+
+ @visitor.when(ErrorNode)
+ def visit(self, node: ErrorNode):
+ return f'ERROR {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
new file mode 100644
index 00000000..cf0d8f04
--- /dev/null
+++ b/src/codegen/visitors/cil_visitor.py
@@ -0,0 +1,407 @@
+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')
+ idx = self.index
+ instance = self.define_internal_local()
+ result = self.define_internal_local()
+
+ 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.void_data = self.register_data(VOID_NAME).name
+
+ self.create_built_in()
+ for declaration, child_scope in zip(node.declarations, scope.children):
+ self.visit(declaration, child_scope)
+
+ return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode, idx)
+
+
+ @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)
+
+ 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, node.pos)
+ scopes = [scope] + list(scope.functions.values())
+ else:
+ func_declarations = []
+ scopes = list(scope.functions.values())
+
+ 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)))
+
+
+ func_declarations += [f for f in node.features if isinstance(f, FuncDeclarationNode)]
+ for feature, child_scope in zip(func_declarations, scopes):
+ 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('self', self.current_type.name)
+ for p_name, p_type in node.params:
+ self.register_param(p_name, p_type.value)
+
+ 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(result))
+ self.current_method = None
+
+
+ @visitor.when(VarDeclarationNode)
+ 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(var_info.name)
+
+ 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
+
+
+ @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)
+ attributes = [attr.name for attr, a_type in self.current_type.all_attributes()]
+ 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)
+ 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):
+ 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):
+ obj, otype = self.visit(node.obj, scope)
+
+ 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))
+ self.register_instruction(cil.ErrorNode('dispatch_error'))
+ self.register_instruction(continue_label)
+
+ if otype in [StringType(), IntType(), BoolType()]:
+ self.register_instruction(cil.StaticCallNode(otype.name, node.id, result, args_node, rtype.name))
+ else:
+ self.register_instruction(cil.DynamicCallNode(otype.name, obj, node.id, result, args_node, rtype.name))
+ return result, self._return_type(otype, node)
+
+ @visitor.when(BaseCallNode)
+ def visit(self, node: BaseCallNode, scope: Scope):
+ obj, otype = self.visit(node.obj, scope)
+
+ 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))
+ self.register_instruction(cil.ErrorNode('dispatch_error'))
+ self.register_instruction(continue_label)
+
+ self.register_instruction(cil.StaticCallNode(node.type, node.id, result, args_node, rtype.name))
+ return result, self._return_type(otype, node)
+
+ @visitor.when(StaticCallNode)
+ def visit(self, node: StaticCallNode, scope: Scope):
+ 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:
+ result = self.define_internal_local()
+
+ self.register_instruction(cil.DynamicCallNode(self.current_type.name, 'self', node.id, result, args_node, rtype.name))
+ 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(ConstantVoidNode)
+ def visit(self, node: ConstantVoidNode, scope: Scope):
+ result = self.register_local(node.lex)
+ void = cil.VoidConstantNode(result)
+ self.register_instruction(void)
+ return result, VoidType()
+
+ @visitor.when(SelfNode)
+ def visit(self, node: SelfNode, scope: Scope):
+ return 'self', self.current_type
+
+ @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)
+
+ @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))
+
+ # 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, instance, [cil.ArgNode(instance)], typex.name))
+
+ return instance, typex
+
+
+ @visitor.when(WhileNode)
+ def visit(self, node: WhileNode, scope: Scope):
+ '''
+ LABEL start
+ IF NOT GOTO end
+ res =
+ GOTO start
+ LABEL end
+ '''
+ start_label = cil.LabelNode(f'start__{self.idx}')
+ end_label = cil.LabelNode(f'end__{self.idx}')
+
+ result = self.define_internal_local()
+ self.register_instruction(cil.VoidConstantNode(result))
+ self.register_instruction(start_label)
+
+ cond, _ = self.visit(node.cond, scope)
+ 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))
+ self.register_instruction(end_label)
+
+ return result, ObjectType()
+
+ @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(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))
+
+ false_expr, ftypex = self.visit(node.else_stm, scope)
+ self.register_instruction(cil.AssignNode(result, false_expr))
+ self.register_instruction(cil.GotoNode(end_label.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):
+ 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
+
+ @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)
+
+ expr, typex = self.visit(node.expr, child_scope)
+ return expr, typex
+
+
+ @visitor.when(CaseNode)
+ def visit(self, node: CaseNode, scope: Scope):
+ expr, typex = self.visit(node.expr, scope)
+
+ result = self.define_internal_local()
+ end_label = cil.LabelNode(f'end__{self.idx}')
+ error_label = cil.LabelNode(f'error__{self.idx}')
+
+ isvoid = self.check_void(expr)
+ self.register_instruction(cil.GotoIfNode(isvoid, error_label.label))
+
+ try:
+ new_scope = scope.expr_dict[node]
+ except:
+ new_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.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)
+ # Si llegó aquí es porque no matcheó nunca
+ self.register_instruction(cil.ErrorNode('case_error'))
+ self.register_instruction(error_label)
+ self.register_instruction(cil.ErrorNode('case_void_error'))
+ self.register_instruction(end_label)
+ return result, typex
+
+ @visitor.when(OptionNode)
+ 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)
+ 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)
+ return expr_i
+
+ @visitor.when(NotNode)
+ def visit(self, node: NotNode, scope: Scope):
+ return self._define_unary_node(node, scope, cil.LogicalNotNode)
+
+ @visitor.when(BinaryNotNode)
+ def visit(self, node: BinaryNotNode, scope: Scope):
+ return self._define_unary_node(node, scope, cil.NotNode)
+
+
+ @visitor.when(IsVoidNode)
+ def visit(self, node: IsVoidNode, scope: Scope):
+ expr, _ = self.visit(node.expr, scope)
+ result = self.check_void(expr)
+ return result, BoolType()
+
+ @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.LessNode)
+
+ @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.EqualNode)
diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py
new file mode 100644
index 00000000..4fdd95bc
--- /dev/null
+++ b/src/codegen/visitors/mips_visitor.py
@@ -0,0 +1,783 @@
+from codegen.cil_ast import *
+from utils import visitor
+from codegen.visitors.base_mips_visitor import BaseCILToMIPSVisitor
+from codegen.tools import SymbolTable, AddressDescriptor, RegisterDescriptor, AddrType
+from semantic.tools import VariableInfo
+from semantic.types import VOID_NAME
+from pprint import pprint
+
+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_)
+
+ # guardo las direcciones de cada método
+ self.save_meth_addr(node.dotcode)
+ self.data_code.append(f"type_Void: .asciiz \"Void\"") # guarda el nombre de Void Type
+ # guardo las direcciones de cada tipo
+ self.save_types_addr(node.dottypes)
+ # visit DataNodes
+ for data in node.dotdata:
+ self.visit(data)
+ # visit code instrunctions
+ for code in node.dotcode:
+ self.visit(code)
+
+ self.initialize_runtime_errors()
+
+ return self.data_code, self.code
+
+ @visitor.when(TypeNode)
+ def visit(self, node:TypeNode):
+ 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}\"")
+
+ @visitor.when(FunctionNode)
+ def visit(self, node:FunctionNode):
+ self.code.append('')
+ self.code.append(f'{node.name}:')
+ self.locals = 0 # pointer to count the ammount of locals that are pushed into the stack
+
+ self.code.append('# Gets the params from the stack')
+ 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, 1): # gets the params from the stack
+ self.visit(param, i, n)
+ self.code.append('# Gets the frame pointer from the stack')
+ for i, var in enumerate(node.localvars, len(node.params)):
+ self.visit(var, i)
+ self.locals = len(node.params) + len(node.localvars)
+ 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.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):
+ self.symbol_table.insert_name(node.name)
+ self.var_address[node.name] = self.get_type(node.type)
+ self.code.append(f'# Pops the register with the param value {node.name}')
+ self.code.append('addiu $fp, $fp, 4') # pops the register with the param value from stack
+ self.addr_desc.insert_var(node.name, length-idx)
+
+ @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.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.var_address[node.dest] = AddrType.INT
+ self.save_var_code(node.dest)
+
+
+ @visitor.when(NotNode)
+ def visit(self, node:NotNode):
+ rdest = self.addr_desc.get_var_reg(node.dest)
+ rsrc = self.save_to_register(node.expr)
+ self.code.append(f'# {node.dest} <- ~{node.expr}')
+ self.code.append(f'not ${rdest}, ${rsrc}')
+ self.code.append(f'addi ${rdest}, ${rdest}, 1')
+ 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'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
+
+ @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):
+ rright = self.addr_desc.get_var_reg(node.right)
+ self.code.append(f"add ${rdest}, ${rleft}, ${rright}")
+ elif self.is_int(node.right):
+ self.code.append(f"addi ${rdest}, ${rleft}, {node.right}")
+ elif self.is_int(node.left):
+ if self.is_int(node.right):
+ self.code.append(f"li ${rdest}, {node.left + node.right}")
+ elif self.is_variable(node.right):
+ 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)
+ 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):
+ rright = self.addr_desc.get_var_reg(node.right)
+ self.code.append(f"sub ${rdest}, ${rleft}, ${rright}")
+ elif self.is_int(node.right):
+ self.code.append(f"addi ${rdest}, ${rleft}, -{node.right}")
+ elif self.is_int(node.left):
+ if self.is_int(node.right):
+ self.code.append(f"li ${rdest}, {node.left-node.right}")
+ 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}, {node.left}, $t9")
+ self.var_address[node.dest] = AddrType.INT
+
+ @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', func_op=lambda x, y: x*y)
+
+ @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', func_op=lambda x, y: int(x / y))
+
+ def _code_to_mult_div(self, node, op:str, func_op):
+ rdest = self.addr_desc.get_var_reg(node.dest)
+ if self.is_int(node.left) and self.is_int(node.right):
+ try:
+ self.code.append(f"li ${rdest}, {func_op(node.left, node.right)}")
+ except ZeroDivisionError:
+ self.code.append('la $a0, zero_error')
+ self.code.append('j .raise')
+ else:
+ 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)
+ elif self.is_int(node.right):
+ self.code.append(f"li $t9, {node.right}")
+ rright = 't9'
+ elif self.is_int(node.left):
+ # right es una variable porque falló el primer if
+ rright = self.addr_desc.get_var_reg(node.right)
+ self.code.append(f"li $t9, {node.left}")
+ rleft = 't9'
+ if op == 'div':
+ self.code.append('la $a0, zero_error')
+ self.code.append(f'beqz ${rright}, .raise')
+ self.code.append(f"{op} ${rleft}, ${rright}")
+ 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}')
+ self._code_to_comp(node, 'slt', lambda x, y: x < y)
+
+ @visitor.when(LessEqNode)
+ def visit(self, node:MinusNode):
+ self.code.append(f'# {node.dest} <- {node.left} <= {node.right}')
+ self._code_to_comp(node, 'sle', lambda x, y: x <= y)
+
+ @visitor.when(EqualNode)
+ def visit(self, node:MinusNode):
+ self.code.append(f'# {node.dest} <- {node.left} = {node.right}')
+ 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)
+ 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.right):
+ self.code.append(f"li $t9, {node.right}")
+ self.code.append(f"{op} ${rdest}, ${rleft}, $t9")
+ elif self.is_int(node.left):
+ if self.is_int(node.right):
+ self.code.append(f"li ${rdest}, {int(func_op(node.left, node.right))}")
+ 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.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}')
+ 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})')
+
+
+ @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):
+ rsrc = self.addr_desc.get_var_reg(node.value)
+ elif self.is_int(node.value):
+ self.code.append(f'li $t9, {node.value}')
+ rsrc = 't9'
+ elif self.is_void(node.value):
+ 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)
+ 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('# 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('# 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
+
+ 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})')
+
+
+ @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:
+ self.code.append(f'lw ${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):
+ self.code.append(f'la ${rdest}, type_Int')
+ self.var_address[node.dest] = AddrType.STR
+
+ @visitor.when(LabelNode)
+ def visit(self, node:LabelNode):
+ self.code.append(f'{node.label}:')
+
+ @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)
+ 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(node.obj) # obtiene la instancia actual
+
+ self.code.append('# Gets in a0 the actual direction of the dispatch table')
+ self.code.append(f'lw $t9, 8(${reg})') # obtiene en t9 la dirección del dispatch table
+ self.code.append('lw $a0, 8($t9)')
+ function = self.dispatch_table.find_full_name(node.type, node.method)
+ index = 4*self.dispatch_table.get_offset(node.type, function) + 4 # guarda el offset del me
+ self.code.append(f'# Saves in t8 the direction of {function}')
+ self.code.append(f'lw $t8, {index}($a0)') # guarda en $t8 la dirección de la función a llamar
+ # Call function
+ 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, 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 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()
+ 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
+ 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):
+ 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)
+ reg = self.addr_desc.get_var_reg(node.dest)
+ self.code.append(f'sw ${reg}, ($sp)')
+ elif self.is_int(node.dest):
+ self.code.append(f'li $t9, {node.dest}')
+ self.code.append(f'sw $t9, ($sp)')
+ self.code.append('addiu $sp, $sp, -4')
+
+ @visitor.when(ReturnNode)
+ def visit(self, node:ReturnNode):
+ # 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}')
+ 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
+ self.code.append('# Removing all locals from stack')
+ self.code.append(f'addiu $sp, $sp, {self.locals*4}')
+ # 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}')
+
+ @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'sub ${rdest}, $t8, ${reg}')
+ self.loop_idx += 1
+
+ @visitor.when(ConcatNode)
+ def visit(self, node: ConcatNode):
+ rdest = self.addr_desc.get_var_reg(node.dest)
+ self.code.append('# Allocating memory for the buffer')
+ self.code.append('li $a0, 356')
+ self.code.append('li $v0, 9')
+ self.code.append('syscall')
+ self.code.append(f'move ${rdest}, $v0')
+
+
+ rsrc1 = self.addr_desc.get_var_reg(node.arg1)
+ if node.arg2 is not None:
+ rsrc2 = self.addr_desc.get_var_reg(node.arg2)
+
+ self.code.append('# Copy the first string to dest')
+ var = self.save_reg_if_occupied('a1')
+ self.code.append(f'move $a0, ${rsrc1}')
+ self.code.append(f'move $a1, ${rdest}')
+ self.push_register('ra')
+ self.code.append('jal strcopier')
+
+ if node.arg2 is not None:
+ 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('sb $0, 0($v0)')
+ self.pop_register('ra')
+ 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(var)
+ self.loop_idx += 1
+
+ @visitor.when(SubstringNode)
+ def visit(self, node: SubstringNode):
+ rdest = self.addr_desc.get_var_reg(node.dest)
+ self.code.append('# Allocating memory for the buffer')
+ self.code.append('li $a0, 356')
+ self.code.append('li $v0, 9')
+ self.code.append('syscall')
+ self.code.append(f'move ${rdest}, $v0')
+
+
+ if self.is_variable(node.begin):
+ rstart = self.addr_desc.get_var_reg(node.begin)
+ elif self.is_int(node.begin):
+ rstart = 't8'
+ self.code.append(f'li $t8, {node.begin}')
+ if self.is_variable(node.end):
+ rend = self.addr_desc.get_var_reg(node.end)
+ var = None
+ elif self.is_int(node.end):
+ var = self.save_reg_if_occupied('a3')
+ rend = 'a3'
+ self.code.append(f'li $a3, {node.end}')
+
+ self.get_reg_var(node.word)
+ rself = self.addr_desc.get_var_reg(node.word)
+
+ 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 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')
+
+ self.code.append(f'move $t8, ${rself}')
+ self.code.append(f'{start}:')
+ 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'j {start}')
+ self.code.append(f'{end_lp}:')
+
+ 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}')
+
+ self.code.append(f'beq $t9, ${rend}, {end}')
+ self.code.append(f'lb $t9, 0($t8)')
+ self.code.append(f'beqz $t9, {error}') # if $t9 is zero error cause havent finished
+ self.code.append(f'sb $t9, 0($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'{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)
+ self.code.append('# Printing a string')
+ self.code.append('li $v0, 4')
+ self.code.append(f'move $a0, ${reg}')
+ self.code.append('syscall')
+
+ @visitor.when(OutIntNode)
+ def visit(self, node: OutIntNode):
+ if self.is_variable(node.value):
+ reg = self.addr_desc.get_var_reg(node.value)
+ elif self.is_int(node.value):
+ reg = 't8'
+ self.code.append(f'li $t8, ${node.value}')
+
+ self.code.append('# Printing an int')
+ self.code.append('li $v0, 1')
+ self.code.append(f'move $a0, ${reg}')
+ self.code.append('syscall')
+
+
+ @visitor.when(ReadStringNode)
+ def visit(self, node: ReadStringNode):
+ # self.data_code.append(f'{node.dest}: .space 20')
+ rdest = self.addr_desc.get_var_reg(node.dest)
+ self.code.append('# Allocating memory for the buffer')
+ self.code.append('li $a0, 356')
+ self.code.append('li $v0, 9')
+ self.code.append('syscall')
+ self.code.append(f'move ${rdest}, $v0')
+ # self.code.append(f'sb $0, 0(${rdest})')
+
+ self.code.append('# Reading a string')
+ var = 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, 356')
+ 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
+ self.load_var_if_occupied(var)
+
+
+ @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):
+ self.code.append('# Exiting the program')
+ if self.is_variable(node.value):
+ reg = self.addr_desc.get_var_reg(node.value)
+ elif self.is_int(node.value):
+ reg = 't8'
+ self.code.append(f'li $t8, {node.value}')
+
+ rself = self.addr_desc.get_var_reg(node.classx)
+
+ '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')
+
+ @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'lw $t9, 4(${rsrc})') # 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
+ 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.append('# In t9 is stored the size of the object')
+ self.code.append(f'bge $t8, $t9, exit_{self.loop_idx}')
+ self.code.append(f'lw $a0, (${rsrc})')
+ self.code.append('sw $a0, ($v0)')
+ # 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('# 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
+
+ @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.value_conforms_to_obj(rdest, 'String', node.type)
+ elif self.var_address[node.expr] == AddrType.INT:
+ self.value_conforms_to_obj(rdest, 'Int', node.type)
+ elif self.var_address[node.expr] == AddrType.BOOL:
+ self.value_conforms_to_obj(rdest, 'Bool', node.type)
+ elif self.is_int(node.expr):
+ self.value_conforms_to_obj(rdest, 'Int', node.type)
+
+ @visitor.when(ErrorNode)
+ def visit(self, node: ErrorNode):
+ self.code.append(f'la $a0, {node.type}')
+ self.code.append('j .raise')
+
+ @visitor.when(VoidConstantNode)
+ def visit(self, node:VoidConstantNode):
+ rdest = self.addr_desc.get_var_reg(node.out)
+ self.code.append('# Initialize void node')
+ self.code.append(f'li $a0, 4') # argument (size)
+ self.code.append('li $v0, 9') # code to request memory
+ self.code.append('syscall')
+ self.code.append('# Loads the name of the variable and saves the name like the first field')
+ self.code.append(f'la $t9, type_{VOID_NAME}') # loads the name of the variable
+ 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
+
+ @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})')
+ self.var_address[node.dest] = AddrType.REF
diff --git a/src/cool_parser/__init__.py b/src/cool_parser/__init__.py
new file mode 100644
index 00000000..ce456e07
--- /dev/null
+++ b/src/cool_parser/__init__.py
@@ -0,0 +1 @@
+from cool_parser.parser import CoolParser
diff --git a/src/cool_parser/__pycache__/__init__.cpython-37.pyc b/src/cool_parser/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 00000000..39de5da3
Binary files /dev/null and b/src/cool_parser/__pycache__/__init__.cpython-37.pyc differ
diff --git a/src/cool_parser/__pycache__/base_parser.cpython-37.pyc b/src/cool_parser/__pycache__/base_parser.cpython-37.pyc
new file mode 100644
index 00000000..bd12b20e
Binary files /dev/null and b/src/cool_parser/__pycache__/base_parser.cpython-37.pyc differ
diff --git a/src/cool_parser/__pycache__/logger.cpython-37.pyc b/src/cool_parser/__pycache__/logger.cpython-37.pyc
new file mode 100644
index 00000000..090b0eca
Binary files /dev/null and b/src/cool_parser/__pycache__/logger.cpython-37.pyc differ
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 00000000..7fabd687
Binary files /dev/null and b/src/cool_parser/__pycache__/parser.cpython-37.pyc differ
diff --git a/src/cool_parser/base_parser.py b/src/cool_parser/base_parser.py
new file mode 100644
index 00000000..29188afe
--- /dev/null
+++ b/src/cool_parser/base_parser.py
@@ -0,0 +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)
+ 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
new file mode 100644
index 00000000..e1d62278
--- /dev/null
+++ b/src/cool_parser/logger.py
@@ -0,0 +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()
diff --git a/src/cool_parser/output_parser/debug.txt b/src/cool_parser/output_parser/debug.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt
new file mode 100644
index 00000000..2cb03511
--- /dev/null
+++ b/src/cool_parser/output_parser/parselog.txt
@@ -0,0 +1,9548 @@
+ 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',26,983)
+ 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: 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: 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 [