Обзор кода новой грамматики

Issue #8 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 8 ``` Дмитрий, пожалуйста посмотрите и потестируйте код последних изменений в грамматике, касающийся изменения правила для оператора конкатенации (и отказа от страшненькой и не всегда работающей - не говоря уже о трудностях при обновлении - is_conc). Можете импортировать новую грамматику к себе в проект, только добавьте соответствующие изменения в dfa_preg_matcher.php и preg_matcher.php.

Все юнит-тесты проходят (мне только пришлось изменить доступ в одном, т.к. изменилось положение вершин в дереве - теперь конкатенация не обладает ассоциативностью и дерево получается немного другим, используйте print_r($root) в тестах чтобы посмотреть на него), но не все из них так уж подробны. При успешном прохождении тестов мы удалим старый код, пока я его закомментировал.

Если сможете - найдите контрпримеры.

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

Еще одна проблема - добавить в сканер определение ситуаций, когда строка закончилась а символьный класс - нет, чтобы вывести сообщение о незакрытой квадратной скобке. В jlex нет <<<EOF>>> правил, надо либо разбираться в исходниках - как узнать текущее состояние - либо переходить на другой вариант типа JFlex.

P.S. Рекомендую вашему вниманию функцию create_error_node, значительно сократившую код парсера. Настоятельно советую завести функции типа create_unary_operator, create_binary_operator, create_ternary_operator... ```

Reported by `oasychev` on 2010-09-20 22:13:15

Comments (6)

  1. Oleg Sychev reporter

    ``` Сообщения об ошибках работают полностью.

    Дмитрий, жду вашего мнения о новом способе работе с конкатенацией для удаления старого кода. ```

    Reported by `oasychev` on 2010-09-21 18:03:31

  2. Oleg Sychev reporter

    ``` Срочно провести обзор этой проблемы, чтобы мы могли подчистить парсер перед рефакторингом... ```

    Reported by `oasychev` on 2010-09-28 20:19:11

  3. Oleg Sychev reporter

    ``` Дмитрий, если не видите проблем с новым способом обработки конкатенации - удалите закомментированный код старого способа (огромная функция) и закройте это issue. ```

    Reported by `oasychev` on 2011-02-11 19:45:30

  4. Former user Account Deleted

    ``` С новым способом проблем нет, закоментированный код старого удалил. ```

    Reported by `Xapuyc7` on 2011-03-13 17:56:54

  5. Log in to comment