Обзор кода новой грамматики
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)
-
reporter -
reporter ``` Срочно провести обзор этой проблемы, чтобы мы могли подчистить парсер перед рефакторингом... ```
Reported by `oasychev` on 2010-09-28 20:19:11
-
reporter ``` Дмитрий, если не видите проблем с новым способом обработки конкатенации - удалите закомментированный код старого способа (огромная функция) и закройте это issue. ```
Reported by `oasychev` on 2011-02-11 19:45:30
-
Account Deleted ``` С новым способом проблем нет, закоментированный код старого удалил. ```
Reported by `Xapuyc7` on 2011-03-13 17:56:54
-
Account Deleted Reported by `Xapuyc7` on 2011-03-13 18:00:12 - Status changed: `Fixed`
-
reporter Reported by `oasychev` on 2011-05-06 23:00:41 - Status changed: `Done`
- Log in to comment
``` Сообщения об ошибках работают полностью.
Дмитрий, жду вашего мнения о новом способе работе с конкатенацией для удаления старого кода. ```
Reported by `oasychev` on 2010-09-21 18:03:31