Fase 4: parser estructural inicial y AST
Fase 4: parser estructural inicial y AST
Enlace a esta secciónEstado: completada para el subconjunto inicial que la fase entrega. El alcance se cierra aquí; las ampliaciones que aparecen como parciales en la matriz de compatibilidad no se presentan como implementadas.
Alcance implementado
Enlace a esta sección- AST compartido por los modos de indentación y llaves, con spans de fuente y bloque con estilo explícito.
- Funciones top-level en ambos modos, incluidas visibilidad,
asyncy atributos. - En modo llaves, admite passthrough de
struct,enum,impl,trait,mod,use,type,const,static,extern,union,macro_rules!e invocaciones de macro, incluso con atributos/visibilidad; Syn valida el fragmento y su contenido opaco se conserva. - En cuerpos de función:
let,return,break,continue, expresiones Rust,if/else if/else,loop,whileyfor. - Firmas, tipos, patrones, expresiones y items preservados con sus spans de origen; el backend valida las categorías Rust cubiertas con Syn.
break,continuey cabecerasfortambién reciben validación sintáctica. - Expresión final sin
;representada comotail; con;permanece como statement. Las pruebas confirman esta regla en ambos estilos. - Diagnósticos con spans, recuperación de funciones posteriores y límite de 128 niveles de bloques y cadenas
else ifpara evitar desbordamiento de pila. - Colisiones de alias reservados en nombres de función y bindings simples de
letproducenOX3001con sugerenciar#...cuando Rust permite ese raw identifier.
Criterios y evidencia
Enlace a esta seccióncrates/oxido-language/tests/parser.rs cubre funciones en ambos modos, AST de bloques/controles, paridad de semicolon/tail, atributos, visibilidad, passthrough, macros, Unicode, recuperación, nombres reservados y límites de recursión. crates/oxido-compiler/tests/pipeline.rs verifica con Syn items passthrough, todos los controles iniciales en ambos modos, atributos inválidos y diagnósticos para cabeceras for y saltos malformados.
La revisión de cierre ejecuta formato, check, Clippy y la suite completa con --locked. No se declara generación de Rust ni compilación Cargo: son entregables de Fase 5.
Límites explícitos del parser inicial
Enlace a esta sección- Items superiores distintos de funciones y passthrough no están admitidos en modo indentación. Los items con cuerpos indentados (
struct,enum,impl,trait, módulos) pertenecen a la ampliación de lenguaje de Fase 7. - En el cierre de Fase 4 no se normalizaban aliases dentro de fragmentos Rust; la normalización para el subconjunto de Fase 6 está documentada en informe de Fase 6. Los tokens opacos de macros/atributos siguen sin normalizarse.
matchse conserva como expresión Rust con brazos entre llaves; no existe sintaxis indentada para sus brazos.- Syn valida sintaxis, no resolución, tipos, macros expandidas,
build.rsni semántica derustc.
La matriz por característica está en compatibilidad. La decisión de separar estructura Óxido de fragmentos Rust está en ADR-0001. Fase 5 añadió generación .ox → .rs, mapas de posiciones e integración Cargo; los cambios de Fase 6 están registrados en su informe.