ParseKit的Newick语法

时间:2011-11-03 11:51:48

标签: objective-c tree xcode4.2 parsekit

我正在使用ParseKit为我正在研究的项目构建一个解析Newick树的语法,而且我已经做到了这一点。它基于这里的语法:http://en.wikipedia.org/wiki/Newick_format。我想使用语法而不是现在使用的现有笨重的递归代码。

但是,我不确定如何指定名称和长度节点来解释空字符串或通用字符串和数字。我已经从示例和ParseKit网站上得到了这么多,以及对于Java书籍的Bulding Parsers的一些略读,但是错过了一些东西。有人能指出我正确的方向吗?

目前的语法:

@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;

1 个答案:

答案 0 :(得分:2)

ParseKit的开发人员。最后提出的解决方案基本上是正确的,只有一个小修正:QuotedString是一个词:

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

同样供将来参考:如果你想要一个'通配符'匹配器(你正在尝试使用上面的*),你可以使用内置解析器:Any。这将匹配任何令牌。

在ParseKit中,*是一个修饰符,意思是零或更多。