Теория формальных языков - автомат
-
04-10-2019 - |
Вопрос
Мне интересно о формальных языках. У меня есть своего рода парсер: он читает à xml-подобное сериализованную деревообразную структуру и превратить его в многоиспользуемый массив.
Моя точка зрения находится на сходстве между используемым алгоритмом и разногласийными видами автоматов (штатные машины Turgines Stages ...).
Таким образом, вопрос в том, что является автоматом, который я имею подразумеваю здесь, и к каким формальным языкам семейство она подходит? И что насчет рекурсии?
То, что я подразумеваю под «Automaton, который я использую неявно», - это минимальный автомат, чтобы сделать ту же работу ».
Вот полный источник:
$ слова; // Массив XML Tag 'u003Ctag> ','u003C/tag> и простой текстовый контент
$ tree = массив ('Тип' => 'root', 'sub' => массив ());
$ Ptree = Array (& $ Tree);
$ Deep = 0;
foreach ($ слова как $ Elem) {
if ( preg_match($openTag, $elem) ) { // $elem is an open tag
$pTree[$deep++]['sub'][] = array( // we add an element to the multidim array
'type' => 'block',
'content' => $elem,
'sub' => array()
);
$size = sizeof($pTree[$deep - 1]['sub']);
$pTree[$deep] = &$pTree[$deep - 1]['sub'][$size - 1]; // down one level in the tree
} elseif ( preg_match($closeTag, $elem) ) { // it is a close tag
$deep--; // up in the tree
} else { // simple element
$pTree[$deep]['sub'][] = array(
'type' => 'simple',
'content' => $elem
);
}
}
Решение
Пожалуйста, посмотрите на свой вопрос снова. Вы имеете в виду $words
Переменная, которая не находится в вашем примере. Кроме того, нет кода, не зная, что делается, это трудно ответить вам.
Судя по имени переменной $deep
, вероятно, не является государством. Состояние в автомате - это элемент набора, который специфичен для автомата; $deep
Похоже, это может содержать глубину, любое положительное целое число. Опять трудно сказать без кода.
В любом случае, вы, вероятно, не «неявно используете» любой автомат вообще, если вы не разработали свой код как реализацию одного.
Ваши простые файлы XML-подобных XML, вероятно, могут быть распознаны детерминированным стеком машины или генерируемой детерминированной грамимой на контексте, делая их тип-2 в хомской иерархии. Еще раз это просто предположение: «Структура сериализованного дерева XML-подобных XML» слишком расплывчато для любого формализма.
Короче говоря, если вы хотите использовать какую-либо формальную теорию, сложите свои вопросы более формально.
Редактировать (после просмотра кода):
Вы строите дерево. Это вне досягаемости для автомата (по крайней мере, «стандартных»). Конечные автоматы работают только с входом и состоянием, стековыми станками добавляют стопку для этого, а Turging Machines имеет ленту для чтения, которую они могут перемещаться в обоих направлениях.
«Выход» автомата - это простое «да» (принято) или «нет» (не принято или бесконечный петля). (Turging Machines можно определить, чтобы обеспечить больше выходов на своей ленте.) Лучше всего я могу ответить на «какой минимальный автомат для выполнения той же работе» - это то, что ваш язык может быть принят стековым аппаратом; Но это будет работать очень иначе и не дает вам деревья.
Тем не менее, вы можете посмотреть в грамматики - еще одна формальная языковая конструкция, которая вводит концепцию Разбор деревьевОтказ То, что вы делаете здесь, создает такое дерево разбора с попугаром сверху вниз.