# 0003 — Parser esatto dei `.asm` con fallback euristico **Stato:** accettata ## Contesto Il `.asm` Creo è un binario proprietario non documentato. La prima soluzione, un'euristica testuale (`AssemblyComponentScanner`), contava le occorrenze di stringhe candidate e produceva falsi positivi (riferimenti fantasma, componenti soppressi con placement residuo). Inoltre la lista dei componenti della distinta **non coincide** con i file necessari a Creo per aprire l'assieme: ne servono di più (soppressi, riferimenti esterni). Se ne manca uno Creo risponde solo `[-4] Dati di input non completi`. ## Decisione Per reverse engineering si è decodificata la struttura a record (`AsmRecordReader`), validata contro BOM esportate da Creo. È il metodo preferito. L'euristica resta come **fallback** quando il parser lancia `InvalidDataException`, perché la validazione copre solo un campione di file. La fase 4 tiene tre liste separate (distinta, soppressi, riferimenti esterni) con regole di ricorsione diverse. ## Conseguenze - Estrazione esatta sui file che rispettano il formato; nessun falso positivo da conteggio. - Due implementazioni da mantenere, per ora; l'euristica serve anche a due script. - Ogni caso strano diventa un test minimale costruito byte per byte. - Dettagli: [`../formato-asm-record.md`](../formato-asm-record.md), [`../formato-asm.md`](../formato-asm.md).