29 lines
1.4 KiB
Markdown
29 lines
1.4 KiB
Markdown
# 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).
|