3

我正在为我正在处理的项目构建一个语法来使用 ParseKit 解析 Newick 树,并且我已经做到了这一点。它基于此处的语法: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;
4

1 回答 1

2

ParseKit 的开发者在这里。最后你提出的解决方案基本上是正确的,有一个小修复:QuotedString是一个词:

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

也供将来参考:如果您想要一个“通配符”匹配器(您在*上面尝试做的事情),您可以使用内置解析器:Any. 这将匹配任何令牌。

在 ParseKit 中,*是一个修饰符,表示零或多个。

于 2011-11-03T16:01:51.207 回答