Voglio verificare se due lingue hanno una stringa in comune. Entrambe queste lingue provengono da un sottogruppo di linguaggi regolari descritto di seguito e ho solo bisogno di sapere se esiste una stringa in entrambe le lingue, non produrre una stringa di esempio.Test intersezione di due lingue regolari
La lingua è specificato da una stringa glob-come come
/foo/**/bar/*.baz
dove **
partite 0 o più caratteri, e *
partite zero o più caratteri che non sono /
, e tutti altri personaggi sono letterali.
Qualche idea?
grazie, Mike
EDIT:
ho implementato qualcosa che sembra funzionare bene, ma devono ancora provare una prova di correttezza. Potete vedere il source e unit tests
Quale lingua utilizzerai per eseguire il controllo? Probabilmente avrai bisogno di scrivere un banco di prova per questo. Se potessi pubblicare un banco di prova abbastanza completo sarebbe di aiuto. –
Questo dovrà essere eseguito in JS. Ovviamente dovrò scrivere un banco di prova. Ho trovato un sottoinsieme utile per il quale posso calcolare l'intersezione in modo efficiente facendo alcuni trucchi. Il sottoinsieme utile è uno dove * e ** possono apparire solo all'inizio o direttamente dopo un /, e un/non può essere adiacente ad un altro /. Ciò significa che non ho mai bisogno di preoccuparmi se * foo * può corrispondere a boo * baz - Devo fare il backtracking, ma non una quantità ridicola dato che posso sempre trasformare il testo dopo un * o ** in un controllo suffisso. –