You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
C++20, pipeline de 8 fases con 3 IRs y 5 binarios de inspección.lexer → parser → AST → binding → inferencia → typecheck → HulkIR → BannerIR → BannerVM. Se producen hulk_lexer, hulk_parser_demo, hulk_semantic, hulk_eval (evaluador de árbol) y hulk_backend (con --emit-banner, --emit-banner-compiled, --run-banner, --restricted-inference), más el binario final hulk que compila IR embebido (Makefile:L96-284, src/backend/main.cpp:L17-60). El lexer usa construcción de Thompson canónica sobre expresiones regulares con combinadores lit/range/seq/alt/star/plus/opt (src/lexer/regex/thompson.cpp:L37-95) — todas las variantes clásicas verificadas — y simulación NFA con cierre-ε sin determinizar (nfa_simulator.cpp:L52-104), maximal munch por sobrescritura de la mejor aceptación y desempate por priority = orden de declaración. El parser es LALR(1) generado por tools/parsergen/parsergen.cpp (1607 líneas), un generador propio completo: parsea directivas %token/%type/%left/%right/%nonassoc, construye FIRST/GO_TO/closure LR(1) canónico (L809-869), y fusiona a LALR por igualdad de core sets (merge_lalr_states, L879-929) — la construcción canónica de Bison. Resolución shift/reduce por precedencia+asociatividad (resolve_shift_reduce, L975-1005); conflictos remanentes se comparan contra doc/parser/expected_conflicts.txt en make parser-sync-check-own. Como oráculo paralelo se incluye una gramática Bison (src/parser/grammar.y, 26 KB) validable con parser-sync-check-bison. La VM BANNER (src/vm/banner_vm.cpp, ~1000 LOC) es de bytecode con 42 opcodes: aritmética, lógica, control, Param+Call/VCall/SCall, Allocate/GetAttr/SetAttr (layout aplanado con slots consistentes en toda la jerarquía, banner_vm.h:L86-89), IsType/AsType, builtins numéricos. Heap con mark-and-sweep (vm_heap.h), free-lists en objetos y strings, handles generacionales, límites configurables por VMOptions (max_frames=100k, max_steps=10M, max_heap=1M). El evaluador de árbol (camino A, src/eval/) usa un HulkValue = variant<Nil,double,string,bool,shared_ptr<HulkObject>> independiente — dos caminos de ejecución que sirven como oráculos diferenciales mutuos.
Resultados de Tests
71/71 obligatorios + 10/10 extras pasan según CI 2026-06-22.
Fallas confirmadas (todas de features NO marcadas):
ok/arrays (8 tests, falla léxica [): no existen tokens LBracket/RBracket en token_kind.hpp:L4-83; lexer_rules.cpp:L18-58 no define reglas para [/].
ok/macros (8 tests): sin token Define/Macro, sin reglas de parser, sin nodo AST. El equipo no marcó macros.
ok/lambdas: sin LambdaExpr en AST, sin tipo función en los 7 kinds de HulkType, sin token ->. El => solo aparece en function/method_decl de una línea (hulk.grammar:L131,L276).
Lo que el Compilador Implementa
Semántica en 4 sub-fases (analyzer.cpp:L228-257): SemanticPolicyChecker (política de anotación), binding con SymbolResolver que produce resolution_map: unordered_map<Expr*, ResolutionResult> con 10 kinds (Variable/Param/Synthetic/Function/BuiltinFunction/BuiltinConstant/Type/Method/Attribute/Unresolved, symbol_resolver.h:L71-114), inferencia de tipos de punto fijo con max_iterations=10 (type_inferencer.cpp:L46), y type checking sobre unordered_map<Expr*, HulkType>. Mapas laterales, AST inmutable — el reporte cita correctamente a Roslyn como referencia.
Sistema de tipos con 7 kinds (hulk_type.h:L14-21: Number/String/Boolean/Void/Object/Unknown/Error), Error absorbente que corta cascadas, LCA vía cadena parent_name para inferir tipos de if/else. Sin polimorfismo paramétrico.
Builtins reales: Range es un tipo builtin con vtable (semantic_tables.cpp:L36-49), no azúcar; protocolo Iterable builtin con next(): Boolean y current(): Object (L51-60); funciones print, sqrt, sin, cos, exp, log, rand, range (L62-82); constantes PI, E (L84-93). Extensión no documentada: el sufijo T* genera un sub-protocolo T* extends Iterable con current(): T (semantic_tables.cpp:L141-163) para iterables tipados.
BANNER VM ejecución: VCall despacha por vtable del receptor (banner_vm.cpp:L359-385); SCall fija tipo de partida para base(...) (L386-411); IsType y AsType sobre cadena de herencia; GC se dispara en cada alocación de object/string (Concat, ConcatSpace, Allocate) con collect_if_needed + enforce_heap_limit.
Extensión declarada: type holes explícitos _ / auto en cualquier posición de anotación (bindings let, parámetros, retornos, atributos) + bandera --restricted-inference que hace error omitir anotación. El predicado require_annotation(has_annotation, is_type_hole, span) en analyzer.cpp:L79-83 es literalmente idéntico al pseudocódigo del REPORT.md §6. Ortogonal: la bandera no cambia el algoritmo, solo la política de aceptación.
Discrepancias entre Reporte y Código
REPORT.md (503 líneas, ~3012 palabras) es muy fiel al código. Solo dos discrepancias notables:
§2 "Análisis semántico" describe tres sub-fases (binding, inferencia, typecheck); en analyzer.cpp:L228-257hay cuatro — el SemanticPolicyChecker corre antes que las tres restantes. Es una simplificación descriptiva.
§3 "A.11 Iterables" no menciona la sintaxis T* (sub-protocolo tipado generado on-demand por ensure_typed_iterable_protocol), a pesar de ser una extensión sintáctica real.
El resto es exacto: los 7 kinds de tipo, la construcción de Thompson, LALR(1) por parsergen, los 42 opcodes de la VM, el layout aplanado con slots consistentes, el mark-and-sweep con handles generacionales, el pipeline de tres IRs y los binarios por fase.
Features Opcionales
✅ minimal — 20 casos en tests/hulk/ok/minimal/.
✅ types — 10 casos en types/ + 10 en oop/; herencia, self, base(...), override.
✅ OOP + is/as — dispatch virtual real vía VCall+vtable (banner_vm.cpp:L359-385); IsType/AsType con cadena de herencia (L413-427).
✅ iterables — protocolo Iterable builtin + tipo Range real; for desazucarado a while sobre next()/current() (ir_gen.cpp:L241-309); extensión no marcada: sub-protocolos tipados T*.
❌ vectors — no marcado, no implementado (sin tokens [/]).
❌ functors — no marcado, no implementado (sin tipo función en HulkType).
❌ macros — no marcado, no implementado (sin token Define).
Extensión propia declarada: type holes explícitos con _/auto y bandera --restricted-inference. Cobertura dedicada en tests/extension/valid_*.hulk e invalid_*.hulk, más tests/end-to-end/cases/08_inference/ y 09_restricted/.
Diagnóstico de Fallas Principales
Las 3 categorías de fallas (arrays, macros, lambdas) son 100% atribuibles a features NO marcadas por el equipo en el issue #31. No hay ninguna funcionalidad prometida que esté rota.
ok/arrays (8 tests, falla léxica [): ausencia total en NFA — token_kind.hpp no tiene LBracket/RBracket, lexer_rules.cpp no los define. Cualquier [ genera un Error token que detiene el parseo.
ok/macros (8 tests): ausencia total — sin token Define, sin regla de parser, sin nodo AST.
ok/lambdas: ausencia total — sin LambdaExpr, sin tipo función, sin token ->.
Costo aproximado de fix (no requerido por el issue):
Macrosdefine: ~250-400 LOC (token + regla + fase de expansión sintáctica pre-semántica).
Lambdas: ~600-1000 LOC (variante AST, tipo función, closures o desazucarado a clase con apply, codegen con captura).
Conclusión
Compilador completo, sólido y bien documentado. La calidad de implementación —parser generator LALR(1)+LALR propio y completo (tools/parsergen/parsergen.cpp, 1607 LOC canónicas), lexer con construcción de Thompson verificada línea a línea sobre las 6 variantes, VM BANNER con 42 opcodes + mark-and-sweep + layout aplanado + handles generacionales, 3 IRs con puntos de emisión inspeccionables, y dos caminos de ejecución (evaluador de árbol + BannerVM) que sirven como oráculos diferenciales mutuos— supera lo típico de un proyecto docente. La extensión de type holes explícitos (_/auto + --restricted-inference) está bien motivada (resuelve la ambigüedad "olvidé anotar" vs "delegué al compilador"), cuidadosamente implementada como un SemanticPolicyChecker ortogonal al algoritmo de inferencia, y cuenta con cobertura de tests dedicada. El REPORT.md (~3012 palabras) es muy fiel al código, con solo dos discrepancias menores. Todas las fallas de test corresponden exactamente a features no marcadas por el equipo (arrays, macros, lambdas); nada roto en lo prometido. Trabajo destacable que hace ingeniería real en cada fase.
Revisado. La §6 critica el diseño de HULK y no su compilador, y la §8 documenta T* completa, con gramática, semántica, modos de fallo y tests. Las dos están también en el PDF. LP sube a 5. Notas finales: CMP 5 / LP 5.
Activity
github-actions commentedon Jun 15, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branch_Noresponse_...github-actions commentedon Jun 15, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branch_Noresponse_...github-actions commentedon Jun 15, 2026
🤖 HULK Grading Report — 2026-06-15 06:07 UTC
📦 Build
❌ Build failed
github-actions commentedon Jun 15, 2026
🤖 HULK Grading Report — 2026-06-15 06:07 UTC
📦 Build
❌ Build failed
Ray-M05 commentedon Jun 15, 2026
/regrade
github-actions commentedon Jun 15, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branchmain...github-actions commentedon Jun 15, 2026
🤖 HULK Grading Report — 2026-06-15 06:10 UTC
📦 Build
✅ Build successful
📄 Report
✅
REPORT.mdfound (2,523 words)🧪 Tests
ok/minimalok/typesok/ooperrors/lexicalerrors/syntacticerrors/semanticok/extras❌ Failures
ok/extras/for_even_count: compilation failed (exit 2): (3,26) SYNTACTIC: syntax error, unexpected IF, expecting IDENTIFIER, STRING_LITEok/macros/define_block: compilation failed (exit 2): (1,17) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_chain: compilation failed (exit 2): (1,16) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_conditional: compilation failed (exit 2): (1,14) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_hygiene: compilation failed (exit 2): (1,18) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_loop: compilation failed (exit 2): (1,20) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_nested: compilation failed (exit 2): (1,14) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_recursive_expand: compilation failed (exit 2): (1,22) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/simple_define: compilation failed (exit 2): (1,16) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/arrays/array_2d: compilation failed (exit 1): (1,19) LEXICAL: Carácter inválido: '['.ok/arrays/array_auto_init: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_basic: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_literal: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_mutation: compilation failed (exit 1): (1,16) LEXICAL: Carácter inválido: '['.ok/arrays/array_pass: compilation failed (exit 1): (1,29) LEXICAL: Carácter inválido: '['.ok/arrays/array_size: compilation failed (exit 1): (2,18) LEXICAL: Carácter inválido: '['.ok/arrays/array_sum: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/interfaces/interface_basic: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_inherit_compat: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_multiple_impl: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global final🔖 Status
✅ Ready for review. All required tests pass and
REPORT.mdis present.Ray-M05 commentedon Jun 16, 2026
/regrade
github-actions commentedon Jun 16, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branchmain...github-actions commentedon Jun 16, 2026
🤖 HULK Grading Report — 2026-06-16 20:33 UTC
📦 Build
✅ Build successful
📄 Report
✅
REPORT.mdfound (2,523 words)🧪 Tests
ok/minimalok/typesok/ooperrors/lexicalerrors/syntacticerrors/semanticok/extras❌ Failures
ok/macros/define_block: compilation failed (exit 2): (1,17) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_chain: compilation failed (exit 2): (1,16) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_conditional: compilation failed (exit 2): (1,14) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_hygiene: compilation failed (exit 2): (1,18) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_loop: compilation failed (exit 2): (1,20) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_nested: compilation failed (exit 2): (1,14) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/define_recursive_expand: compilation failed (exit 2): (1,22) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/macros/simple_define: compilation failed (exit 2): (1,16) SYNTACTIC: syntax error, unexpected COLON, expecting END, IDENTIFIER, STRok/arrays/array_2d: compilation failed (exit 1): (1,19) LEXICAL: Carácter inválido: '['.ok/arrays/array_auto_init: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_basic: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_literal: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_mutation: compilation failed (exit 1): (1,16) LEXICAL: Carácter inválido: '['.ok/arrays/array_pass: compilation failed (exit 1): (1,29) LEXICAL: Carácter inválido: '['.ok/arrays/array_size: compilation failed (exit 1): (2,18) LEXICAL: Carácter inválido: '['.ok/arrays/array_sum: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/interfaces/interface_basic: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_inherit_compat: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_multiple_impl: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_param: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global final🔖 Status
✅ Ready for review. All required tests pass and
REPORT.mdis present.Ray-M05 commentedon Jun 19, 2026
/regrade
github-actions commentedon Jun 19, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branchmain...github-actions commentedon Jun 19, 2026
🤖 HULK Grading Report — 2026-06-19 06:36 UTC
📦 Build
✅ Build successful
📄 Report
✅
REPORT.mdfound (3,012 words)🧪 Tests
ok/minimalok/typesok/ooperrors/lexicalerrors/syntacticerrors/semanticok/extras❌ Failures
ok/macros/define_block: compilation failed (exit 2): (1,17) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_chain: compilation failed (exit 2): (1,16) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_conditional: compilation failed (exit 2): (1,14) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_hygiene: compilation failed (exit 2): (1,18) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_loop: compilation failed (exit 2): (1,20) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_nested: compilation failed (exit 2): (1,14) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_recursive_expand: compilation failed (exit 2): (1,22) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/simple_define: compilation failed (exit 2): (1,16) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/arrays/array_2d: compilation failed (exit 1): (1,19) LEXICAL: Carácter inválido: '['.ok/arrays/array_auto_init: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_basic: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_literal: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_mutation: compilation failed (exit 1): (1,16) LEXICAL: Carácter inválido: '['.ok/arrays/array_pass: compilation failed (exit 1): (1,29) LEXICAL: Carácter inválido: '['.ok/arrays/array_size: compilation failed (exit 1): (2,18) LEXICAL: Carácter inválido: '['.ok/arrays/array_sum: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/interfaces/interface_basic: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_inherit_compat: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_multiple_impl: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global finalok/interfaces/interface_param: compilation failed (exit 2): (1,11) SYNTACTIC: Solo se permite una expresion global final🔖 Status
✅ Ready for review. All required tests pass and
REPORT.mdis present.apiad commentedon Jun 22, 2026
/regrade
github-actions commentedon Jun 22, 2026
⏳ HULK Grading running on
https://github.com/Jean1408Man/Hulk-Compiler@ branchmain...github-actions commentedon Jun 22, 2026
🤖 HULK Grading Report — 2026-06-22 14:41 UTC
📦 Build
✅ Build successful
📄 Report
✅
REPORT.mdfound (3,012 words)🧪 Tests
ok/minimalok/typesok/ooperrors/lexicalerrors/syntacticerrors/semanticok/extras❌ Failures
ok/macros/define_block: compilation failed (exit 2): (1,17) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_chain: compilation failed (exit 2): (1,16) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_conditional: compilation failed (exit 2): (1,14) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_hygiene: compilation failed (exit 2): (1,18) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_loop: compilation failed (exit 2): (1,20) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_nested: compilation failed (exit 2): (1,14) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/define_recursive_expand: compilation failed (exit 2): (1,22) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/macros/simple_define: compilation failed (exit 2): (1,16) SYNTACTIC: error de sintaxis, no se esperaba COLON, se esperaba END, IDENok/arrays/array_2d: compilation failed (exit 1): (1,19) LEXICAL: Carácter inválido: '['.ok/arrays/array_auto_init: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_basic: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_literal: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/arrays/array_mutation: compilation failed (exit 1): (1,16) LEXICAL: Carácter inválido: '['.ok/arrays/array_pass: compilation failed (exit 1): (1,29) LEXICAL: Carácter inválido: '['.ok/arrays/array_size: compilation failed (exit 1): (2,18) LEXICAL: Carácter inválido: '['.ok/arrays/array_sum: compilation failed (exit 1): (1,14) LEXICAL: Carácter inválido: '['.ok/lambdas/lambda_as_arg: compilation failed (exit 2): (1,19) SYNTACTIC: error de sintaxis, no se esperaba LPAREN, se esperaba IDENTIFIok/lambdas/lambda_basic: compilation failed (exit 2): (1,8) SYNTACTIC: error de sintaxis, no se esperaba LPAREN, se esperaba IDENTIFIEok/lambdas/lambda_closure: compilation failed (exit 2): (2,15) SYNTACTIC: error de sintaxis, no se esperaba LPAREN, se esperaba IDENTIFIok/lambdas/lambda_compose: compilation failed (exit 2): (1,21) SYNTACTIC: error de sintaxis, no se esperaba LPAREN, se esperaba IDENTIFI🔖 Status
✅ Ready for review. All required tests pass and
REPORT.mdis present.apiad commentedon Jul 2, 2026
🔍 Evaluación Automática — Claude Code
Arquitectura del Compilador
C++20, pipeline de 8 fases con 3 IRs y 5 binarios de inspección.
lexer → parser → AST → binding → inferencia → typecheck → HulkIR → BannerIR → BannerVM. Se producenhulk_lexer,hulk_parser_demo,hulk_semantic,hulk_eval(evaluador de árbol) yhulk_backend(con--emit-banner,--emit-banner-compiled,--run-banner,--restricted-inference), más el binario finalhulkque compila IR embebido (Makefile:L96-284,src/backend/main.cpp:L17-60). El lexer usa construcción de Thompson canónica sobre expresiones regulares con combinadoreslit/range/seq/alt/star/plus/opt(src/lexer/regex/thompson.cpp:L37-95) — todas las variantes clásicas verificadas — y simulación NFA con cierre-ε sin determinizar (nfa_simulator.cpp:L52-104), maximal munch por sobrescritura de la mejor aceptación y desempate porpriority= orden de declaración. El parser es LALR(1) generado portools/parsergen/parsergen.cpp(1607 líneas), un generador propio completo: parsea directivas%token/%type/%left/%right/%nonassoc, construye FIRST/GO_TO/closure LR(1) canónico (L809-869), y fusiona a LALR por igualdad de core sets (merge_lalr_states, L879-929) — la construcción canónica de Bison. Resolución shift/reduce por precedencia+asociatividad (resolve_shift_reduce, L975-1005); conflictos remanentes se comparan contradoc/parser/expected_conflicts.txtenmake parser-sync-check-own. Como oráculo paralelo se incluye una gramática Bison (src/parser/grammar.y, 26 KB) validable conparser-sync-check-bison. La VM BANNER (src/vm/banner_vm.cpp, ~1000 LOC) es de bytecode con 42 opcodes: aritmética, lógica, control,Param+Call/VCall/SCall,Allocate/GetAttr/SetAttr(layout aplanado con slots consistentes en toda la jerarquía,banner_vm.h:L86-89),IsType/AsType, builtins numéricos. Heap con mark-and-sweep (vm_heap.h), free-lists en objetos y strings, handles generacionales, límites configurables porVMOptions(max_frames=100k, max_steps=10M, max_heap=1M). El evaluador de árbol (camino A,src/eval/) usa unHulkValue = variant<Nil,double,string,bool,shared_ptr<HulkObject>>independiente — dos caminos de ejecución que sirven como oráculos diferenciales mutuos.Resultados de Tests
ok/arrays(8 tests, falla léxica[): no existen tokensLBracket/RBracketentoken_kind.hpp:L4-83;lexer_rules.cpp:L18-58no define reglas para[/].ok/macros(8 tests): sin tokenDefine/Macro, sin reglas de parser, sin nodo AST. El equipo no marcó macros.ok/lambdas: sinLambdaExpren AST, sin tipo función en los 7 kinds deHulkType, sin token->. El=>solo aparece enfunction/method_declde una línea (hulk.grammar:L131,L276).Lo que el Compilador Implementa
Semántica en 4 sub-fases (
analyzer.cpp:L228-257):SemanticPolicyChecker(política de anotación), binding conSymbolResolverque produceresolution_map: unordered_map<Expr*, ResolutionResult>con 10 kinds (Variable/Param/Synthetic/Function/BuiltinFunction/BuiltinConstant/Type/Method/Attribute/Unresolved,symbol_resolver.h:L71-114), inferencia de tipos de punto fijo conmax_iterations=10(type_inferencer.cpp:L46), y type checking sobreunordered_map<Expr*, HulkType>. Mapas laterales, AST inmutable — el reporte cita correctamente a Roslyn como referencia.Sistema de tipos con 7 kinds (
hulk_type.h:L14-21:Number/String/Boolean/Void/Object/Unknown/Error),Errorabsorbente que corta cascadas, LCA vía cadenaparent_namepara inferir tipos deif/else. Sin polimorfismo paramétrico.Builtins reales:
Rangees un tipo builtin con vtable (semantic_tables.cpp:L36-49), no azúcar; protocoloIterablebuiltin connext(): Booleanycurrent(): Object(L51-60); funcionesprint,sqrt,sin,cos,exp,log,rand,range(L62-82); constantesPI,E(L84-93). Extensión no documentada: el sufijoT*genera un sub-protocoloT*extendsIterableconcurrent(): T(semantic_tables.cpp:L141-163) para iterables tipados.BANNER VM ejecución:
VCalldespacha por vtable del receptor (banner_vm.cpp:L359-385);SCallfija tipo de partida parabase(...)(L386-411);IsTypeyAsTypesobre cadena de herencia; GC se dispara en cada alocación de object/string (Concat,ConcatSpace,Allocate) concollect_if_needed+enforce_heap_limit.Extensión declarada: type holes explícitos
_/autoen cualquier posición de anotación (bindingslet, parámetros, retornos, atributos) + bandera--restricted-inferenceque hace error omitir anotación. El predicadorequire_annotation(has_annotation, is_type_hole, span)enanalyzer.cpp:L79-83es literalmente idéntico al pseudocódigo del REPORT.md §6. Ortogonal: la bandera no cambia el algoritmo, solo la política de aceptación.Discrepancias entre Reporte y Código
REPORT.md (503 líneas, ~3012 palabras) es muy fiel al código. Solo dos discrepancias notables:
analyzer.cpp:L228-257hay cuatro — elSemanticPolicyCheckercorre antes que las tres restantes. Es una simplificación descriptiva.T*(sub-protocolo tipado generado on-demand porensure_typed_iterable_protocol), a pesar de ser una extensión sintáctica real.El resto es exacto: los 7 kinds de tipo, la construcción de Thompson, LALR(1) por
parsergen, los 42 opcodes de la VM, el layout aplanado con slots consistentes, el mark-and-sweep con handles generacionales, el pipeline de tres IRs y los binarios por fase.Features Opcionales
tests/hulk/ok/minimal/.types/+ 10 enoop/; herencia,self,base(...), override.VCall+vtable (banner_vm.cpp:L359-385);IsType/AsTypecon cadena de herencia (L413-427).Iterablebuiltin + tipoRangereal;fordesazucarado awhilesobrenext()/current()(ir_gen.cpp:L241-309); extensión no marcada: sub-protocolos tipadosT*.ProtocolDecl(src/ast/protocols/), gramática (hulk.grammar:L173-213), conformancia estructural (SemanticTables::type_conforms_to_protocol).[/]).HulkType).Define).Extensión propia declarada: type holes explícitos con
_/autoy bandera--restricted-inference. Cobertura dedicada entests/extension/valid_*.hulkeinvalid_*.hulk, mástests/end-to-end/cases/08_inference/y09_restricted/.Diagnóstico de Fallas Principales
Las 3 categorías de fallas (arrays, macros, lambdas) son 100% atribuibles a features NO marcadas por el equipo en el issue #31. No hay ninguna funcionalidad prometida que esté rota.
ok/arrays(8 tests, falla léxica[): ausencia total en NFA —token_kind.hppno tieneLBracket/RBracket,lexer_rules.cppno los define. Cualquier[genera unErrortoken que detiene el parseo.ok/macros(8 tests): ausencia total — sin tokenDefine, sin regla de parser, sin nodo AST.ok/lambdas: ausencia total — sinLambdaExpr, sin tipo función, sin token->.Costo aproximado de fix (no requerido por el issue):
new T[n],a[i]: ~250-400 LOC (2 tokens + 2 producciones +NewArrayExpr+IndexExpr+ builtin runtime).define: ~250-400 LOC (token + regla + fase de expansión sintáctica pre-semántica).apply, codegen con captura).Conclusión
Compilador completo, sólido y bien documentado. La calidad de implementación —parser generator LALR(1)+LALR propio y completo (
tools/parsergen/parsergen.cpp, 1607 LOC canónicas), lexer con construcción de Thompson verificada línea a línea sobre las 6 variantes, VM BANNER con 42 opcodes + mark-and-sweep + layout aplanado + handles generacionales, 3 IRs con puntos de emisión inspeccionables, y dos caminos de ejecución (evaluador de árbol + BannerVM) que sirven como oráculos diferenciales mutuos— supera lo típico de un proyecto docente. La extensión de type holes explícitos (_/auto+--restricted-inference) está bien motivada (resuelve la ambigüedad "olvidé anotar" vs "delegué al compilador"), cuidadosamente implementada como unSemanticPolicyCheckerortogonal al algoritmo de inferencia, y cuenta con cobertura de tests dedicada. El REPORT.md (~3012 palabras) es muy fiel al código, con solo dos discrepancias menores. Todas las fallas de test corresponden exactamente a features no marcadas por el equipo (arrays, macros, lambdas); nada roto en lo prometido. Trabajo destacable que hace ingeniería real en cada fase.docs(grading): add report for #31 Jean1408Man/Hulk-Compiler
Ray-M05 commentedon Sep 14, 2026
pendiente a revisión de extraordinario de LP
apiad commentedon Sep 15, 2026
Revisado. La §6 critica el diseño de HULK y no su compilador, y la §8 documenta
T*completa, con gramática, semántica, modos de fallo y tests. Las dos están también en el PDF. LP sube a 5. Notas finales: CMP 5 / LP 5.