Recentemente ho rilevato il bug "Toy Language" e ho sperimentato varie configurazioni semplici di tokenizer. La più recente utilizza la libreria boost.regex per identificare e ottenere il valore dei token. Mi sembra che regex sia il modo migliore per andare, quando si crea un tokenizer. La mia ricerca ha dimostrato che la mia ipotesi è falsa, o almeno non completamente vera.
Questo è ciò che un utente di Stack Overflow ha dovuto dire riguardo a una domanda su: È una cattiva idea usare regex tokenken string per lexer? :
Using regular expressions is THE traditional way to generate your tokens.
Dopo aver fatto ulteriori ricerche su questo argomento, mi sono reso conto che anche i generatori di lexer più popolari usano regex. Ad esempio, prendi il generatore di lexer Lex :
Lex helps write programs whose control flow is directed by instances of regular expressions in the input stream. It is well suited for editor-script type transformations and for segmenting input in preparation for a parsing routine. - http://dinosaur.compilertools.net/lex/.
Questo mi porta a trarre la conclusione che regex è il solito modo preferito per creare un tokenizer. Dopo aver cercato ancora una volta il mio argomento e tentato di trovare un secondo parere, ho trovato questa affermazione in risposta a questa domanda su Stack Overflow:
The reason why people tell you that regular expressions aren't the best idea for a case like this is because regular expressions take more time to evaluate, and the regular expression language has many limitations and quirks that make it unsuitable for many applications. - user:670358
E ha continuato a dire
Many compilers use a basic single-pass tokenization algorithm. The tokenizer has a very basic idea of what can be used as a delimiter, how constants and identifiers should be treated, etc. The tokenizer will then just iterate through the input quickly and emit a string of tokens that can then be easily parsed. - user:670358
Questo mi ha lasciato confuso e contemplando diverse cose:
- È regex necessario per un tokenizzatore creato a mano. O è eccessivo?
- Se la regex non viene usata spesso, allora quanto sono estrapolati i token?
Questo può o non può essere basato su opinioni, ma credo che ci sia un metodo / metodo preferito tra i programmatori.