[af]? lex разница в регулярных выражениях - PullRequest
0 голосов
/ 30 марта 2012

Я не знаю, как это сделать, и я не нашел в Интернете хороших ресурсов для того, как выполнить эту операцию [.] Я пытаюсь взять аннотированное правило производства EBNF, которое является разницей между двумя регулярными выражениями и превратить его в (na | f?) правило спецификации лексической грамматики [.] Проблема в том, что я не вижу способа сделать это нормально [.] {3}, есть ли способ сделать это с помощью алгебры Клини, как вы можете использовать пустое совпадение с чередованием в грамматике без контекста [?]

1 Ответ

1 голос
/ 03 апреля 2012

Как выглядит правило производства EBNF (и вы можете написать это в EBNF?)

Разница в множестве A\B между регулярными выражениями эквивалентна пересечению с дополнением: A&~B: набор строк, совпадающих с A, лишен любых строк, сопоставленных с B. Ни flex, ни alex не поддерживают такую ​​семантику в своих регулярных языки выражений.

Выражение этой формы все еще обозначает регулярный язык и поэтому имеет эквивалентный автомат, для которого существует регулярное выражение, основанное только на операторах чередования и Клини. Это эквивалентное выражение нелегко найти, и оно зависит от конкретных внутренних элементов A и B. То есть мы не можем просто вставить A и B в некоторую общую формулу регулярного выражения, чтобы результат обозначал разность множеств. Оригинальные A и B не будут отображаться в регулярном выражении разности наборов.

...