Tokenizzazione del testo in una struttura dati di una corda

2

Sto creando un editor di testo che utilizza un tokenizzatore basato su Ragel per supportare l'evidenziazione della sintassi. Sto prendendo in considerazione l'uso di una struttura dei dati della corda per supportare modifiche efficienti e operazioni di annullamento / ripetizione. Esiste un approccio standard per la tokenizzazione o la ricerca del testo contenuto in questo tipo di struttura dati? Alcuni caratteri possono far sì che il tokenizer consumi il resto del flusso.

    
posta sesteel 22.08.2014 - 22:01
fonte

1 risposta

1

Ho familiarità con l'approccio alla macchina di stato sottostante descritto nel tuo link --- è in circolazione da decenni. Può tokenise / categorizzare qualsiasi flusso di testo che supporta un'operazione get-next-character.

Ho familiarità con le corde nel contesto di un editor di testo. Il solito scopo (come so che lo so) è di suddividere le stringhe in porzioni che hanno gli stessi attributi di visualizzazione: colore, carattere, collegamento, interruzioni di riga, ecc. Funziona bene sia per la modifica che per la visualizzazione. Le principali operazioni sono: inserire carattere; cancella carattere; cancella token; taglia e incolla. Mantenere la corda non è facile.

Non è ovvio dalla tua domanda se ti aspetti che il tokeniser generi la corda. È una corda di token, in cui ogni token ha i propri attributi di visualizzazione? Sarei preoccupato che il montaggio e la tokenizzazione potessero interferire tra loro. Cose come citazioni e commenti possono raggiungere una lunga strada.

No, non c'è un modo standard per combinare queste idee. Sospetto che l'idea giusta sia che il tokeniser generi / rigenera la corda, immediatamente per la parte sullo schermo e in background per il resto. Le modifiche dovrebbero interessare la corda (solo) con un breve ritardo prima della retokenising. La tokenizzazione deve essere anche interrompibile.

Sembra un approccio ragionevole, ma sono sicuro che ci sono molte sfide nel farlo funzionare bene. Potresti voler leggere qualche codice sorgente (Eclipse? Netbeans?) Per vedere come fanno gli altri.

    
risposta data 23.08.2014 - 12:24
fonte

Leggi altre domande sui tag