Вопрос

Мне интересно о формальных языках. У меня есть своего рода парсер: он читает à 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 можно определить, чтобы обеспечить больше выходов на своей ленте.) Лучше всего я могу ответить на «какой минимальный автомат для выполнения той же работе» - это то, что ваш язык может быть принят стековым аппаратом; Но это будет работать очень иначе и не дает вам деревья.

Тем не менее, вы можете посмотреть в грамматики - еще одна формальная языковая конструкция, которая вводит концепцию Разбор деревьевОтказ То, что вы делаете здесь, создает такое дерево разбора с попугаром сверху вниз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top