Sto scrivendo un lexer in JavaScript. È piuttosto tipico: le regole sono specificate con espressioni regolari e producono un token.
Non sono sicuro del modo migliore per gestire quando più regole sono abbinate. I lexer esistenti che ho guardato gestiscono questo selezionando la regola con la corrispondenza più lunga.
Sembra anche una strategia praticabile, tuttavia, per usare semplicemente la prima regola che corrisponde. Questa è la mia strategia attuale.
Ecco un esempio:
Input:
:=
Regole:
: -> COLON
= -> EQUALS
:= -> ASSIGN
La regola della corrispondenza più lunga restituirebbe ASSIGN
, dove la regola della prima corrispondenza restituirebbe COLON
e poi EQUALS
.
Ovviamente questo non è auspicabile, quindi sotto la mia implementazione vorrei solo riordinare le regole per mettere la regola ASSIGN
prima come segue:
:= -> ASSIGN
: -> COLON
= -> EQUALS
È un approccio fattibile per utilizzare solo la prima regola di corrispondenza? Quali sono i vantaggi e gli svantaggi di ciascun approccio?