colonna di monitoraggio (offset) in presenza di caratteri di tabulazione

-1

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?

    
posta Valentin Tihomirov 03.01.2016 - 11:38
fonte

1 risposta

0

JavaCC risponde in questo modo

The generated parser has a JavaCharStream named jj_input_stream that has setTabSize(int) and getTabSize() methods. Use the tab width value from your IDE and pass it to the setTabSize method, this will make the token locations more accurate.

La mia proposta è migliore. Il compilatore dovrebbe rimanere bloccato a larghezza di tabulazione costante, ad esempio 1 per contare la tabulazione come qualsiasi altro carattere. L'editor, che è a conoscenza sia della larghezza attuale della tabulazione sia del numero di tabulazioni sulla riga corrente (l'editor può facilmente calcolare queste informazioni poiché ha il file caricato in memoria e visualizza già la riga di codice), regola la column informazioni dal compilatore di conseguenza. L'unico problema sarebbe la sorpresa del programmatore quando giustappone le posizioni riportate dal compilatore con gli oggetti selezionati nell'editor.

    
risposta data 03.01.2016 - 21:42
fonte

Leggi altre domande sui tag