Работа с деревьями в CorrectWriting - опыт Preg

Issue #212 new
Former user created an issue

Originally reported on Google Code with ID 212

По результатами встречи 19 июля, прошу пояснить работу с описаниями вершин и их генерацией
в Preg, в частности занести сюда те моменты, что были высказаны на встрече, чтобы они
не потерялись.

Reported by mamontov.dp on 2013-07-19 17:50:24

Comments (5)

  1. Oleg Sychev repo owner
    Смысл тот, чтобы обеспечить возможность размещать свой код в узлах различным обработчикам.
    
    Там применялась следующая стратегия: строится два дерева: абстрактное и конкретное.
    Абстрактное дерево образовано классами узлов, поля в которых публичные, и главная задача
    которых - хранить информацию, данные об узле. В них могут содержаться функции, полезные
    для дерева вообще и никак Это preg_nodes.php - такое дерево строит парсер.
    
    Каждый обработчик задает свои классы узлов, параллельные иерархии абстрактных узлов
    - и агрегирующие их. Абстрактная фабрика в парсере после построения абстрактного дерева,
    строит конкретное из узлов обработчика (это buil_tree() в preg_regex_handler.php -
    только вам, возможно, придется обойтись без наследования обработчика дерева от корневого
    класса), используя данные обработчиком имена классов - абстрактные узлы агрегируются
    в конкретные, чтобы последние имели доступ к необходимым данным; если обработчик не
    задал своего класса то используется объект абстрактного дерева.
    
    Также при построении производится "принятие" узла обработчиком - не все обработчики
    могут поддерживать любые узлы. Если узел не принят - генерируется ошибка принятия и
    пользователю (обычно учителю) выдается сообщение, что подключенный им обработчик таких
    узлов не поддерживает.
    

    Reported by oasychev on 2013-07-22 11:54:04 - Status changed: Accepted

  2. Oleg Sychev repo owner

    Reported by oasychev on 2013-07-22 11:58:36 - Labels added: Component-WritingCompetently

  3. Oleg Sychev repo owner
    Теперь если понятно - ваше issue, что непонятно - спрашивайте.
    

    Reported by oasychev on 2013-07-25 22:30:15

  4. Former user Account Deleted
    Я не совсем понимаю - что у нас будет храниться в DST. Также я не совсем понимаю, когда
    мы начинаем преобразовывать AST в DST - во время или после синтаксического разбора?
    
    Кроме этого возник вопрос - обработчиков может быть несколько, как я понимаю - нужно
    в question на всякий случай сделать get_handler?
    

    Reported by mamontov.dp on 2014-05-14 06:08:40

  5. Oleg Sychev repo owner
    Сегодня мы вроде это обсудили. Преобразовывать я думаю начинаем как принято - ленивым
    образом, после первого запроса к dst.
    
    Получение хендлера никак не должно быть связано с вопросом - в одном вопросе может
    быть куча хендлеров для самых разных обстоятельств (от оценивания до подсказок), и
    вообще что-то другое, не вопрос, может создавать свои хендлеры.
    Их надо задавать как язык - например через string_from_xx со значением по умолчанию
    (если не нужно dst) и хранить в спец. поле processed_string.
    

    Reported by oasychev on 2014-05-14 20:32:24

  6. Log in to comment