Грамматика Ньюика для ParseKit

Я создаю грамматику для анализа деревьев Ньюика с помощью ParseKit для проекта, над которым работаю, и я зашел так далеко. Он основан на приведенной здесь грамматике: http://en.wikipedia.org/wiki/Newick_format. Я хотел бы использовать для этого грамматику, а не существующий неуклюжий рекурсивный код, с которым я сейчас работаю.

Однако я не уверен, как указать узлы имени и длины для учета либо пустых строк, либо обобщенных строк и чисел. Я получил это далеко от примеров и на сайте ParseKit, а также немного просмотрел книгу Bulding Parsers for Java, но кое-что упустил. Может кто-нибудь указать мне в правильном направлении, пожалуйста?

Текущая грамматика:

@start = tree+;
tree = subtree ';' | branch ';';
subtree = leaf | internal;
leaf = name;
internal = '(' branchset ')' name;
branchset = branch | branchset ',' branch;
branch = subtree length;
name = *;
length = * | ':' *

Спасибо!

--Вариант ответа:

Возможно, эти узлы имени и длины будут работать. Кто-нибудь может подтвердить?

name = Word | Quoted String;
length = ':' Number;

person Chris F.    schedule 03.11.2011    source источник


Ответы (1)


Разработчик ParseKit здесь. Предлагаемое вами решение в конце в основном правильное с одним небольшим исправлением: QuotedString - это одно слово:

name = Word | QuotedString;
length = ':' Number;

Также для справки в будущем: если вам нужен сопоставитель «подстановочных знаков» (то, что вы пытаетесь сделать с * выше), вы можете использовать встроенный парсер: Any. Это будет соответствовать любому токену.

В ParseKit * — это модификатор, означающий ноль или более.

person Todd Ditchendorf    schedule 03.11.2011
comment
Отлично, спасибо! Теперь, если бы я только мог заставить ParseKit работать в XCode 4.2 на Lion. У меня масса проблем с настройкой зависимостей и связыванием. В основном, я делаю это: 1. проверить выпуск 1.5 с тегами 2. перетащить проект в папку моих фреймворков 3. добавить ParseKit в качестве целевой зависимости 4. добавить ParseKit.framework в качестве ссылки на библиотеку 5. попытка компиляции не удалась pastie.org/2805285 - person Chris F.; 03.11.2011
comment
похоже, что есть проблема с отсутствующей строкой формата в подбиблиотеке зависимостей RegexKit. Проверьте этот файл/строку: RegexKitLite.m:894. Кроме того, не могли бы вы поддержать мой ответ выше, поскольку он, кажется, решил эту проблему? Спасибо. - person Todd Ditchendorf; 03.11.2011
comment
Да, я закомментировал эту строку, и она скомпилировалась. Я пытался проголосовать, но моя репутация недостаточно высока. - person Chris F.; 03.11.2011
comment
Извините, я думаю, я имею в виду «выбрать как ответ». Спасибо за это. - person Todd Ditchendorf; 03.11.2011
comment
Без проблем. Я настроил синтаксический анализатор и анализирую строку newick, которую я отправляю, однако теперь получаю предупреждение Невозможно восстановить ранее выбранный кадр. Подробнее здесь. Код настолько прост, что я наверняка делаю что-то глупое. pastie.org/2805591 - person Chris F.; 03.11.2011
comment
Я добавил некоторые выходные данные в этот пирог, но это (A: 0,1, B: 0,2, (C: 0,3, D: 0,4): 0,5); - person Chris F.; 04.11.2011
comment
Я нашел проблему в вашей грамматике, однако даже после устранения проблемы я не думаю, что ваша грамматика - это то, что вам нужно. Полная информация здесь: pastie.org/2812186. Извините, у ParseKit нет хороших отчетов об ошибках по этому поводу. В книге Мецкера есть полная информация об ошибке, которую вы допустили в своей грамматике. поищите «левую рекурсию» в книге, я думаю. - person Todd Ditchendorf; 05.11.2011