Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Вычитание регэкспов

Сообщений 1 страница 8 из 8

1

[html]<a href="http://rsdn.org/forum/alg/3979361.all">Автомат для этого выражения -- это D(A x NOT B)</a>[/html]

Пусть L(a) обозначает язык автомата A, т.е. то множество цепочек, которое этим автоматов допускается.

Исходная задача сводится к двум:

1. Для автомата B получить автомат, который допускает -L(B), т.е. дополнение языка L(B). Эта задача стандартная, надо просто инвертировать состояния исходного автомата: каждое допускающее сделать недопускающим, а каждое недопускающее -- допускающим. Тогда, любая цепочка, которая недопускается автоматом B, станет допускаться автмоматом -B. с другой стороны, если цепочка допускается автоматом B, то при ее чтении он переходит в недопускающее состояние, а значит, в недоспускающее состояние автомата -B. Иначе говоря, дополнение автматного языка является автоматным языком.

2. Найти автомат, который допускает пересечение языков автоматов A и -B. Основная идея такого автомата -- это запуск параллельно двух автоматов и допуск цепочки только тогда, когда автматы при чтении цепочки одновременно переходят в допускающие состояния. Но понятие "параллельно" в контексте автоматов и их языков непонятно, надо сконструировать новый автомат, который инкапсулирует идею параллельного запуска в себе. Для этого вводят автомат, который работает не на одной цепочке, а на цепочке из пар символов. Пара в данном случае обозначает как раз, что автоматы запускаются на двух цепочках одновременно. Пары -- это декартово произведение, т.е. мы берем цепочки над алфавитом Sigma(A) X Sigma(B), где Sigma(A) и Sigma(B) -- алфавиты языков соответствующих автоматов. Состояния автомата -- пары состояний исходных автоматов, допускающие из них -- пары из допускающих состояний. На вход этому автомату подается последовательность пар символов, но нам необходимо выполнить требование, что пары в этой цепочке должны формироваться из одних и тех же символов, тогда это будет соответстовать нашей идее запуска двух автоматов на одной цепочке. Т.е. из всех пар мы должны выбрать только те, у которых первый и второй компоненты равны, т.е. диагональ декартова произведения. Эта самая диагональ есть то же самое, что и сама цепочка.

[html]<a href="http://web.archive.org/web/20180103042241/http://cs164fa09.pbworks.com/f/midterm1_solutions.pdf">Problem 1: Extend regular expressions with subtraction (40 баллов из 100)</a>[/html]

см. также Как добавить к КС-грамматике регулярное выражение

Отредактировано Лис (2018-01-03 12:37:13)

0

2

Неожиданное применение:

Бывают разные там направленные ациклические графы (например файловые системы с симлинками и прочими линками).
а может и не файлы, а так называемые "системы" в великом дереве

Множество файлов можно выбирать при помощи разновидности регулярных выражений - масок (globs). Для этого есть спецсимволы * и ?
Регулярные выражения могут быть двух видов - учитывать файлы (include) и не учитывать файлы (exclude).
В результирующее множество файлов должны попасть только те файлы, которые удовлетворяют условиям include и не подходят под условия exclude.

Нужно строить результирующее множество таким образом, чтобы не связываться с узлами, входящими в exclude-множество, так как некоторые из таких узлов могут обладать неприятными особенностями (например иметь слишком длинный путь. Да и вообще файловая система не ациклическая, а вполне циклы может содержать)

По-русски это "упрощение математических выражений".

Отредактировано Лис (2017-11-08 14:55:38)

0

3

Мельчук написал(а):

Что же касается свойства неотрицательности [ = определение не должно формулироваться с использованием отрицания; Welte 1974: 106 ], то оно попросту неприемлемо, ибо в ряде случаев такие определения могут быть необходимы; например аффикс - это "морфа, которая не является корнем". Нам неясно, почему такие определения должны запрещаться из теоретических соображений.

0

4

https://stackoverflow.com/questions/385 … -algorithm

Brzozowski automaton is very well suited for negation, intersection, and more generally all the Boolean functions.

1964, https://en.wikipedia.org/wiki/Brzozowski_derivative

Отредактировано Лис (2018-01-05 17:25:59)

0

5

We found an exception metasymbol at least 6 times in our corpus: it is usually infix and means that a-b should be possible to parse as a but impossible to parse with b. The semantics of exception is hard to define and to combine properly with other constructs, which explains its lack of popularity.

2012, Vadim Zaytsev, BNF was Here: What Have We Done About the Unnecessary Diversity of Notation for Syntactic Definitions

0

6

ВежливыйЛис написал(а):

Да и вообще файловая система не ациклическая,
а вполне циклы может содержать

А вот здесь поподробнее, пожалуйста.

0

7

NuShaman написал(а):

вот здесь поподробнее, пожалуйста.

Что поподробнее, симлики, хардлинки, juction point-ы, точки монтирования - все эти конструкции/механизмы могут создать дополнительное ребро, образующее в дереве цикл.

0

8

Лис написал(а):

все эти конструкции/механизмы могут создать дополнительное ребро,
образующее в дереве цикл.

Это уже не хорошо,
так как цикл в ФС могут использовать злоумышленники.
А какое полезное применение цикла в файловой системе?
И раньше, помню, всякие утилиты (например, ScanDisk) исправляли ошибки-циклы.

0