Immagina di scrivere per la prima volta un compilatore per la tua lingua in cui devi necessariamente segnalare errori all'utente. Il compilatore raccoglie anche informazioni sulla posizione per gli strumenti di back-end. Devono sapere dove si trovano gli elementi del programma. Successivamente, quando hai finito con il tuo compilatore, decidi di fornire anche il supporto IDE. L'editor è in realtà un altro strumento di back-end. Avere posizioni corrette per i componenti del programma aiuta molto a sintonizzare l'evidenziazione e la segnalazione degli errori. In questo momento, improvvisamente ti rendi conto che le posizioni riportate dal compilatore sono discutibili.
Sembra che le definizioni EOL siano più o meno specificate nella lingua in modo da poter riportare correttamente le righe - c'è sempre un accordo tra compilatore e editor. Ma per quanto riguarda la colonna? Se il compilatore segnala che c'è uno svarione per un identificatore situato a line:col
, l'editore potrebbe chiedersi, evidenziando qualcosa di diverso, a seconda delle impostazioni della scheda. Sembra impossibile avere una esatta posizione di line:col
, non importa quanto sia utile, se la larghezza della scheda è specifica per l'editor. Tuttavia, vedo che JavaCC fornisce insieme getLine con il metodo getBeginColumn . Mi chiedo come viene implementato, come è possibile in linea di principio tracciare l'offset? In che modo il lexer corrisponde alla larghezza del tuo editor?