Skip to content

[Grading] Team: Rubén, Sammy y Daniela #47

Open

Description

@ChickenLittle02

Repository URL

https://github.com/daniChina/HULK-Compiler

Branch

main

Team Members

Daniela De La Caridad Guerrero Álvarez
Rubén Martínez Rojas
Sammy Raul Sosa Justiz

Features Implemented

  • Minimal requirements: expressions, functions, variables, conditionals, loops
  • Type system and type checking (with explicit and inferred annotations)
  • OOP: classes, inheritance, polymorphism, is/as
  • Iterables / for loops
  • Vectors / arrays
  • Protocols
  • Functors (first-class functions)
  • Macros

Activity

  1. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch _Noresponse_...

  2. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch _Noresponse_...

  3. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 02:34 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ❌ Build failed

    Fix build errors and comment /regrade to re-run.

  4. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 02:34 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ❌ Build failed

    Fix build errors and comment /regrade to re-run.

  5. ChickenLittle02 commented on Jun 23, 2026

    @ChickenLittle02
    Author

    /regrade

  6. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch main...

  7. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 02:36 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ❌ Build failed

    Build log (last 25 lines)
    Codegen/llvm_codegen.cpp: In member function ‘void hulk::codegen::LLVMCodeGenerator::initialize(const std::string&)’:
    Codegen/llvm_codegen.cpp:62:78: error: invalid use of incomplete type ‘class llvm::Triple’
       62 |     module_->setTargetTriple(llvm::Triple(llvm::sys::getDefaultTargetTriple()));
          |                                                                              ^
    In file included from /usr/lib/llvm-18/include/llvm/IR/IRBuilder.h:26,
                     from Codegen/llvm_codegen.hpp:8,
                     from Codegen/llvm_codegen.cpp:1:
    /usr/lib/llvm-18/include/llvm/IR/DataLayout.h:50:7: note: forward declaration of ‘class llvm::Triple’
       50 | class Triple;
          |       ^~~~~~
    In file included from Codegen/output_build.cpp:7:
    Codegen/../SymbolTable/symbol_table.hpp: In member function ‘std::shared_ptr<FunctionSymbol> SymbolTable::lookupFunction(const std::string&, size_t)’:
    Codegen/../SymbolTable/symbol_table.hpp:205:21: error: ‘as_const’ is not a member of ‘std’
      205 |         return std::as_const(*this).lookupFunction(name, arity);
          |                     ^~~~~~~~
    Codegen/../SymbolTable/symbol_table.hpp:7:1: note: ‘std::as_const’ is defined in header ‘<utility>’; did you forget to ‘#include <utility>’?
        6 | #include <set>
      +++ |+#include <utility>
        7 | #include <vector>
    [compile] 0:15 transcurrido...
    [compile] fallo (exit 1) tras 0:15
    make: *** [Makefile:176: compile] Error 1
    
    ERROR: ./hulk binary not found after make build.
    Make sure your Makefile produces ./hulk in the repo root.
    

    Fix build errors and comment /regrade to re-run.

  8. ChickenLittle02 commented on Jun 23, 2026

    @ChickenLittle02
    Author

    /regrade

  9. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch main...

  10. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 02:47 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ❌ Build failed

    Build log (last 25 lines)
    303 | #include <FlexLexer.h>
          |          ^~~~~~~~~~~~~
    compilation terminated.
    In file included from Parser/core/token_adapter.cpp:6:
    Parser/core/../../Lexer/hulk_lexer.h:15:12: fatal error: FlexLexer.h: No such file or directory
       15 | #  include <FlexLexer.h>
          |            ^~~~~~~~~~~~~
    compilation terminated.
    Codegen/llvm_codegen.cpp: In member function ‘void hulk::codegen::LLVMCodeGenerator::initialize(const std::string&)’:
    Codegen/llvm_codegen.cpp:71:36: error: cannot convert ‘llvm::Triple’ to ‘llvm::StringRef’
       71 |     module_->setTargetTriple(llvm::Triple(llvm::sys::getDefaultTargetTriple()));
          |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          |                                    |
          |                                    llvm::Triple
    In file included from /usr/lib/llvm-18/include/llvm/IR/IRBuilder.h:37,
                     from Codegen/llvm_codegen.hpp:8,
                     from Codegen/llvm_codegen.cpp:1:
    /usr/lib/llvm-18/include/llvm/IR/Module.h:322:34: note:   initializing argument 1 of ‘void llvm::Module::setTargetTriple(llvm::StringRef)’
      322 |   void setTargetTriple(StringRef T) { TargetTriple = std::string(T); }
          |                        ~~~~~~~~~~^
    [compile] fallo (exit 1) tras 0:15
    make: *** [Makefile:176: compile] Error 1
    
    ERROR: ./hulk binary not found after make build.
    Make sure your Makefile produces ./hulk in the repo root.
    

    Fix build errors and comment /regrade to re-run.

  11. ChickenLittle02 commented on Jun 23, 2026

    @ChickenLittle02
    Author

    /regrade

  12. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch main...

  13. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 02:55 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ✅ Build successful

    📄 Report

    ✅ REPORT.md found (3,991 words)

    🧪 Tests

    Category Passed Total Status
    ok/minimal 20 20 ✅
    ok/types 10 10 ✅
    ok/oop 9 10 ⚠️
    errors/lexical 3 6 ⚠️
    errors/syntactic 10 10 ✅
    errors/semantic 12 15 ⚠️
    ok/extras 2 10 ➖

    ❌ Failures

    • ok/oop/method_override: compilation failed (exit 3): (0,0) SEMANTIC: IR invalido: Incorrect number of arguments passed to called func
    • ok/extras/for_complex: compilation failed (exit 2): (3,34) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/for_even_count: compilation failed (exit 2): (2,29) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/for_function: compilation failed (exit 2): (4,28) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/for_let_body: compilation failed (exit 2): (2,28) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/for_loop: compilation failed (exit 2): (2,28) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/for_nested: compilation failed (exit 2): (2,28) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/range_count: compilation failed (exit 2): (2,29) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/extras/range_sum: compilation failed (exit 2): (2,28) SYNTACTIC: Un bloque '{ ... }' no es una expresion; solo puede usarse com
    • ok/macros/define_block: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_chain: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_conditional: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_hygiene: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_loop: compilation failed (exit 2): (1,8) SYNTACTIC: No hay produccion LL(1) para PostfixTail con lookahead REPEAT
    • ok/macros/define_nested: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_recursive_expand: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/simple_define: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/arrays/array_2d: compilation failed (exit 2): (1,19) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_auto_init: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_basic: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • (and 78 more…)

    🔖 Status

    ❌ Not ready for review (some required tests are failing).
    Fix the issues above and comment /regrade to re-run.

  14. ChickenLittle02 commented on Jun 23, 2026

    @ChickenLittle02
    Author

    /regrade

  15. github-actions commented on Jun 23, 2026

    @github-actions

    ⏳ HULK Grading running on https://github.com/daniChina/HULK-Compiler @ branch main...

  16. github-actions commented on Jun 23, 2026

    @github-actions

    🤖 HULK Grading Report — 2026-06-23 03:56 UTC

    Repo: https://github.com/daniChina/HULK-Compiler

    📦 Build

    ✅ Build successful

    📄 Report

    ✅ REPORT.md found (3,991 words)

    🧪 Tests

    Category Passed Total Status
    ok/minimal 20 20 ✅
    ok/types 10 10 ✅
    ok/oop 10 10 ✅
    errors/lexical 6 6 ✅
    errors/syntactic 10 10 ✅
    errors/semantic 15 15 ✅
    ok/extras 9 10 ➖

    ❌ Failures

    • ok/extras/for_even_count: compilation failed (exit 2): (3,26) SYNTACTIC: El operador '+' solo combina expresiones multiplicativas (lite
    • ok/macros/define_block: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_chain: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_conditional: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_hygiene: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_loop: compilation failed (exit 2): (1,8) SYNTACTIC: No hay produccion LL(1) para PostfixTail con lookahead REPEAT
    • ok/macros/define_nested: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/define_recursive_expand: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/macros/simple_define: compilation failed (exit 2): (1,8) SYNTACTIC: la llamada a 'define' requiere parentesis: use define(...)
    • ok/arrays/array_2d: compilation failed (exit 2): (1,19) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_auto_init: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_basic: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_literal: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_mutation: compilation failed (exit 2): (1,16) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_pass: compilation failed (exit 2): (1,29) SYNTACTIC: No hay produccion LL(1) para ArgIdListTail con lookahead LBRAC
    • ok/arrays/array_size: compilation failed (exit 2): (2,18) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/arrays/array_sum: compilation failed (exit 2): (1,14) SYNTACTIC: No hay produccion LL(1) para BindingAssign con lookahead LBRAC
    • ok/interfaces/interface_basic: compilation failed (exit 2): (1,1) SYNTACTIC: No hay produccion LL(1) para Stmt con lookahead PROTOCOL
    • ok/interfaces/interface_inherit_compat: compilation failed (exit 2): (1,1) SYNTACTIC: No hay produccion LL(1) para Stmt con lookahead PROTOCOL
    • ok/interfaces/interface_multiple_impl: compilation failed (exit 2): (1,1) SYNTACTIC: No hay produccion LL(1) para Stmt con lookahead PROTOCOL
    • (and 10 more…)

    🔖 Status

    ✅ Ready for review. All required tests pass and REPORT.md is present.

  17. added a commit that references this issue on Jul 2, 2026
  18. apiad commented on Jul 2, 2026

    @apiad
    Member

    📋 Reporte técnico detallado

    🔍 Evaluación Automática — Claude Code

    Repositorio: https://github.com/daniChina/HULK-Compiler | Rama: main | Tests: 2026-06-23

    Arquitectura del Compilador

    El compilador está escrito en C++17 y compila con g++ vía un Makefile monolítico que descubre LLVM mediante llvm-config. Aunque el REPORT declara requerir LLVM 21 y Clang 21, verificamos durante esta evaluación que el proyecto compila y ejecuta correctamente con LLVM 18 sin cambios en el código — la lógica de descubrimiento es agnóstica de versión. Las únicas dependencias externas son Flex++ para el lexer y la API C++ de LLVM para el backend; no se usan Inkwell, llvm-sys, LALRPOP ni Bison. La organización sigue una descomposición modular por fase (Lexer/, Parser/, SemanticCheck/, SymbolTable/, Types/, Value/, Evaluator/, Codegen/, Compiler/) con ~11 000 líneas de código.

    El pipeline es clásico: el lexer Flex++ produce tokens con posición (línea, columna). Un parser LL(1) dirigido por tabla lee la gramática desde un archivo externo Parser/grammar/grammar.ll1 (263 líneas), calcula conjuntos FIRST/FOLLOW en runtime y construye la tabla predictiva. La conversión CST→AST aplana cadenas de recursión de cola en nodos BinaryExpr propiamente asociativos. El análisis semántico es de dos pasadas nominales más un bucle de punto fijo con máximo 10 iteraciones para inferencia de tipos.

    El backend LLVM está implementado con la API C++ directa (visitor monolítico de 3368 líneas con 35 métodos visit), sin capas intermedias. Escribe IR a .hulk_out.ll e invoca clang como subproceso para enlazar con un runtime en C (231 líneas) que expone impresión, boxing uniforme (BoxedValue{tag, data[8]}), concatenación de cadenas y errores de runtime. No hay VTable: el despacho de métodos es una cadena lineal de comparaciones icmp sobre un puntero a nombre de clase almacenado como primer campo del struct de la instancia. No hay GC — memoria asignada con malloc sin liberar.

    Resultados de Tests

    Categoría Pasados Total Estado
    ok/minimal 20 20 ✅
    ok/types 10 10 ✅
    ok/oop 10 10 ✅
    errors/lexical 6 6 ✅
    errors/syntactic 10 10 ✅
    errors/semantic 15 15 ✅
    ok/extras 9 10 ➖ (informativo — falla for_even_count)
    ok/arrays, macros, interfaces, generators, lambdas — — esperado (no marcado)

    Lo que el Compilador Implementa

    Verificamos por inspección de código y ejecución directa que están completamente implementados:

    • Sistema de tipos con inferencia: kinds Number, String, Boolean, Null, Object con nombre; conformsTo para subtipado; getLowestCommonAncestor para ramas de if/case; inferencia por punto fijo con propagación bidireccional (parámetros ↔ argumentos, retornos ↔ usos).
    • OOP completo: clases con parámetros, atributos e inicializadores, métodos, herencia con inherits ParentClass(args), polimorfismo (verificado con test propio: Dog.speak() selecciona la implementación derivada), is/as con comprobación en runtime, base() para delegar en padre. Detección de ciclos de herencia.
    • case expression: ordena ramas por profundidad de tipo (LCA) y bifurca a la más específica que coincida con el tipo dinámico.
    • Iterables con dos caminos: para range(a, b) genera un bucle optimizado con alloca de índice y FAdd 1.0; para objetos custom invoca next() y current() con despacho dinámico. Anotación opcional for (x: T in iter) para el elemento.
    • Cuatro extensiones propias: unless, repeat(n) body, loop body while (cond) (do-while) y for con tipo opcional. Todas con AST, semántica y codegen; verificamos manualmente los 20 fixtures del equipo en tests/extensions/valid/ — todos pasan.
    • Múltiples errores por corrida: por defecto acumula diagnósticos de lex + sint + sem; --first-phase para detención temprana.
    • Short-circuit lógico: &&/||/and/or bajan a basic blocks con phi, no eager.

    Discrepancias entre Reporte y Código

    El reporte afirma pero el código no sustenta:

    • El REPORT declara "LLVM 21 y Clang 21" como requisitos estrictos. En la práctica, la detección de LLVM en el Makefile es agnóstica de versión y el compilador funciona correctamente con LLVM 18. La afirmación es más restrictiva de lo necesario.
    • El REPORT presenta HULK como "lenguaje orientado a expresiones" pero omite un matiz crítico de su propia gramática: los operadores de control (if, let, while, for, ...) no pueden aparecer como operandos aritméticos sin paréntesis. Esta restricción es la causa directa del único fallo en ok/extras.
    • El REPORT menciona "comentarios de línea y bloque" sin especificar sintaxis. El lexer soporta // y /* */ pero no soporta # (usado por otras convenciones HULK). El impacto es nulo para los tests oficiales pero es una omisión.

    El código implementa pero el reporte omite o subespecifica:

    • El mecanismo real de despacho dinámico: no es una VTable ni un type_id numérico, sino una cadena de icmp sobre punteros a strings de nombres de clase. El costo es O(N) por sitio de llamada, con N clases con ese método. El REPORT dice "despacho por tipo en runtime" pero no explica el algoritmo lineal.
    • La representación uniforme de valores en runtime: BoxedValue{tag, data[8]} con tags 0/1/2 para bool/number/string. El REPORT lo insinúa como "capa de valores unificada" sin especificar la estructura.
    • La conversión de string literals a BoxedValue con char* en el data.

    Features Opcionales

    Feature AST Semántica Codegen Tests
    Type system + inferencia ✅ ✅ multipaso (max 10 iter) ✅ 10/10
    OOP (herencia, polimorfismo, is/as) ✅ ✅ ciclos + overrides ✅ despacho O(N) 10/10
    Iterables (for + range + custom) ✅ ✅ ✅ dos caminos 9/10 (for_even_count)
    Extensiones propias (unless/repeat/loop-while) ✅ ✅ ✅ 20/20 en fixtures internos
    case expression ✅ ✅ orden por LCA ✅ integrado en OOP
    Vectores/arrays ❌ — — N/A (no marcado)
    Protocolos ❌ (keyword tokenizada, no en grammar) — — N/A (no marcado)
    Functores/lambdas ❌ — — N/A (no marcado)
    Macros/define ❌ (keyword tokenizada, no en grammar) — — N/A (no marcado)

    Diagnóstico de Fallas Principales

    El único fallo en categorías obligatorias es ok/extras/for_even_count.hulk, y su causa es puramente sintáctica. El test contiene la expresión evens := evens + if (i % 2 == 0) 1 else 0. La gramática LL(1) del equipo define AddExpr → MulExpr AddExprTail con AddExprTail → PLUS MulExpr AddExprTail, y MulExpr desciende hasta Primary. La única producción de Primary que da acceso a expresiones de control como if es Primary → LPAREN Expr RPAREN — es decir, requiere paréntesis explícitos. El parser emite un mensaje contextualmente muy correcto: "El operador '+' solo combina expresiones multiplicativas; 'if' inicia una expresión de otro tipo y no puede usarse como operando aquí". Verificamos empíricamente que envolver el if en paréntesis, + (if (i % 2 == 0) 1 else 0), resuelve el problema. El error se propaga en cascada: al rechazar la línea 3 se pierde la variable evens, produciendo errores semánticos adicionales.

    Esta decisión de gramática es defendible desde el punto de vista de LL(1) — factorización rigurosa y mensajes de error específicos — pero rompe la intuición de "todo es expresión" que declara la introducción del REPORT. Los otros fallos en categorías informativas (arrays, macros, interfaces, generators, lambdas) son esperados: el equipo no marcó estas features y el AST no tiene los nodos correspondientes.

    Conclusión

    Este es un compilador de calidad claramente sobresaliente dentro de las expectativas del curso: los 71 tests obligatorios pasan completos (minimal + types + oop + errores en las tres fases), las cuatro extensiones propias del equipo están implementadas end-to-end con fixtures que verifican su correcto funcionamiento, y el pipeline entero (~11 000 líneas C++) mantiene una separación limpia entre fases con decisiones arquitectónicas coherentes. El REPORT (~28 KB, en español, muy bien estructurado) describe fielmente casi todos los aspectos del sistema.

    Las debilidades son puntuales y menores: (1) el requisito estricto de LLVM 21 no es real (funciona con LLVM 18); (2) la gramática LL(1) no permite expresiones de control como operandos aritméticos sin paréntesis, matiz que causa el único fallo en ok/extras y que el REPORT omite documentar; (3) el mecanismo de despacho dinámico es lineal O(N), no vía VTable — decisión académicamente defendible pero merecería explicación más explícita en la sección de codegen. La brecha entre reporte y código es pequeña: el reporte tiende a la sobreestimación en un par de detalles secundarios, pero la mayor parte de las afirmaciones se verifican punto por punto en el código. Es un trabajo maduro, con disciplina de organización y suficiente cobertura de tests internos como para infundir confianza en la robustez del compilador.

  19. daniChina commented on Sep 14, 2026

    @daniChina

    Solicitud de revision del informe de LP para el extraordinario
    Las respuestas del feedback se encuentran en las secciones 14 y 15 del informe .

  20. apiad commented on Sep 15, 2026

    @apiad
    Member

    Revisado. La §14 critica HULK en conjunto y la §15 presenta la frontera del if frente a + como una decisión, con las alternativas descartadas y su efecto en la gramática. LP sube a 5. Notas finales: CMP 5 / LP 5.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    gradingCompiler project submission for automated grading

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions