Что касается примеров, то они должны быть по такому вот пути: bnftool-4.0.0-beta-060323\src\bnftool-4.0.0-beta-060323-src.zip\bnftool-4.0.0-beta-060323\examples\bnf\BNF.bnf.
Если не найдете, я могу выслать.
Я искал инструмент для тестирования функции Проверка Синтаксиса для SQL редактора, т.е. мне были нужны разные SQL запросы. Немного экспериментировал с bnftool. Составил BNF вида
grammar ::= "select count(*), a" "from table1" ( "where a > 4" )? ( group_clause )? ; group_clause ::= "group by 1" ( "having count(*) > 4" )?;Файл bnf.properties полностью такой же как и в примерах, которые прилагаются к программе, файл лексем пустой.
После запуска генерации по команде
bnftool.exe -J-Dbnf.properties.file=bnf.bnf.properties bnf.bnf test_alt -javahome c:\Java\jdk1_6_0_01
В результате получается набор файлов, в каждом по 1 тест-кейсу.
Меня не устроило то, что не был сгенерирован ни один тест-кейс, который содержал бы WHERE и GROUP BY выражения одновременно.
Как пояснил allex, test_alt создавался для тестирования рекурсивных парсеров (LL), поэтому используемый в нем критерий покрытия нацелен на поиск наиболее распространенных ошибок в таких парсерах - неправильное распознавание альтернатив. Поэтому в тестовом наборе будет тест для всех возможных первых токенов всех альтернатив. Комбинации могут не покрываться.
При этом есть возможность написать свой генератор для необходимого критерий покрытия. Генератор, как и все плагины, получает на вход объектную модель входной грамматики (дерево абстрактного синтаксиса+связи между определением и использованием правил).
Этим я еще не занимался, т.к. успел решить задачу с использованием PICT, нагенерил достаточно много разных достаточно сложных запросов, а сейчас уже на очереди другие задачи), пока нет времени.
Многие тест-кейсы дублируются, это нормально. По словам allex'a, есть гарантия, что для связной грамматики покроются все возможные символы всех возможных альтернатив. При создании теста для одной альтернативы несущественные места (контекст) достраиваются первым попавшимся способом, эти куски получаются повторяющимися. В SynTESK, вроде, проблема с дублями частично решена.