3

私が取り組んでいるプロジェクトのために 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;
4

1 に答える 1

2

ここでParseKitの開発者。最後に提案された解決策は、基本的に1つの小さな修正で正しいです:QuotedString1つの単語です:

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

また、将来の参考のために:「ワイルドカード」マッチャー(上記で実行しようとしていること*)が必要な場合は、組み込みのパーサーを使用できますAny。それはどのトークンとも一致します。

ParseKitでは、*はゼロ以上を意味する修飾子です。

于 2011-11-03T16:01:51.207 に答える