Я працюю над інструментом для маніпулюванняконтекстно-вільні мови, а внутрішнє представлення граматики зберігається як кінцевий автомат. Дивлячись далі в EBNF і RegEx, я дізнався, що EBNF має «винятки», а RegEx має негативний погляд. Я можу побачити, як вони можуть бути змодельовані симетричною різницею NFA, але підозрювали, що вони виходять за рамки можливостей звичайної DFA або NFA.
Але потім я натрапив це що досить ясно говорить про те, що я помилявся. Чи може хто-небудь вказати на вільний ресурс, який може показати, як перетворити EBNF з винятками, або RegEx з негативним поглядом в DFA?
Відповіді:
0 для відповіді № 1Можна замінити негативний вигляд на aпозитивний погляд на повний набір можливих поєдинків мінус від'ємне поєднання. Напр. якщо ми працювали з окремими символами a-z як простір збігу, /what(?!n)
такий же, як і /what(?=[a-mo-z])/
. Теоретично це нормально, але не настільки велика на практиці, коли ми маємо справу з більшими матчами /afraid of (?!chinese)/
.
https://cs.stackexchange.com/questions/2557/how-to-simulate-backreferences-lookaheads-and-lookbehinds-in-finite-state-auto дає гарне ставлення до перетворення lookaheads у щось подібне до DFA, з важливим застереженням наприкінці.