Newick граматика за ParseKit

Създавам граматика за анализиране на Newick дървета с помощта на ParseKit за проект, върху който работя, и стигнах дотук. Базира се на граматиката тук: http://en.wikipedia.org/wiki/Newick_format. Бих искал да използвам граматика за това, а не съществуващия тромав рекурсивен код, с който работя сега.

Не съм сигурен обаче как да посоча възлите на името и дължината, за да отчитам празни низове или обобщени низове и числа. Стигнах толкова далеч от примерите и от сайта на ParseKit, както и от малко преглеждане на книгата Bulding Parsers за 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;

Също така за бъдещи справки: ако желаете съпоставяне на 'Wildcard' (това, което се опитвате да направите с * по-горе), можете да използвате вградения анализатор: Any. Това ще съответства на всеки жетон.

В ParseKit * е модификатор, означаващ нула или повече.

person Todd Ditchendorf    schedule 03.11.2011
comment
Отлично, благодаря! Сега, само ако можех да накарам ParseKit да работи в XCode 4.2 на Lion. Имам много проблеми с настройката на зависимостите и свързването. По принцип правя следното: 1. проверявам изданието с етикети 1.5 2. плъзгам проекта в моята папка frameworks 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 няма добро отчитане на грешки за тези неща. В книгата Metsker има пълни подробности за грешката, която сте имали в граматиката си. потърсете "лява рекурсия" в книгата, мисля. - person Todd Ditchendorf; 05.11.2011