Я создаю грамматику для анализа деревьев Ньюика с помощью 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;