Sto usando ocamllex per scrivere un lexer per un linguaggio di scripting ma sto affrontando un conflitto con la mia regola per i commenti.E 'possibile in ocamllex definire una regola che guarda al prossimo carattere senza consumarlo?
Desidero consentire ai miei argomenti di comando di essere non quotati purché contengano solo caratteri alfanumerici e barre "/". Per esempio:
echo "quoted argument [email protected]#%" /this/second/argument/is/unquoted
Inoltre, uno dei miei prerequesites è commenti in stile C++ con "//"
//this is a comment
echo hello world
Il problema questo porta è cose come
echo foo//comment
vorrei il mio lexer per produrre un token "foo", lasciando anche il "//" intatto, da consumare nella prossima volta che chiedo al lexer il token. È possibile? La ragione di ciò è che è possibile che il buffer di input non abbia ancora raggiunto la fine del commento e preferirei immediatamente restituire il token "foo" piuttosto che bloccare inutilmente il tentativo di consumare impazientemente il commento.
Se il parser ha una regola che utilizza solo 'echo foo', non dovrebbe essere sufficiente per rimandare il lexing dei commenti? – didierc
A livello di lexer, devi solo assicurarti che i parametri non quotati non contengano doppie barre, altrimenti dovresti discriminare i casi in cui potrebbe accadere, e forse avere due serie di regole per quando è possibile o meno – didierc
Tu dovrebbe probabilmente fornire un piccolo programma che mostra il problema, in modo che possiamo vedere come risolverlo. – didierc