ANTLR ツール (Java) を使用して xml ドキュメント用の独自の文法を作成する方法と、ANTLR ツール (Java) を使用してそれらのドキュメントを解析する方法を誰か教えてもらえますか?
2 に答える
文法自体で XML タグをサポートする私の ANTLR 派生である ANTXR を調べてください。SAX または XMLPull をフロント エンドとして使用できます。(注: ANTLR 2.x に基づいています)
http://javadude.com/tools/antxr/index.html
短い例:
header {
package com.javadude.antlr.sample.xml;
import java.util.List;
import java.util.ArrayList;
}
class PeopleParser extends Parser;
document returns [List results = null]
: results=<people> EOF
;
<people> returns [List results = new ArrayList()]
{ Person p; }
: ( p=<person> { results.add(p); } )*
;
<person> returns [Person p = new Person()]
{
String first, last;
p.setId(@id); // attributes are read using "@xxxx"
}
: ( first=<firstName> { p.setFirstName(first); }
| last=<lastName> { p.setLastName(last); }
)*
;
<firstName> returns [String value = null]
: pcdata:PCDATA { value = pcdata.getText(); }
;
<lastName> returns [String value = null]
: pcdata:PCDATA { value = pcdata.getText(); }
;
完全に準拠した (検証していない場合でも) XML パーサーを作成する場合は、W3C 仕様 ( http://www.w3.org/TR/REC-xml/ ) を読む必要があります。内部および外部の DTD サブセット、パラメーター エンティティ、および一般エンティティを処理する必要があります。これは、ANTLR を使用した場合でも、主要なタスクになります。URL を解決し、namespaceURI を処理できる必要があります。そしてもっとたくさん。
サブセットのみを解析したいのではないかと思います (ただし、標準に準拠していないパーサーを作成するのは良い考えではないと思います)。その場合、最初にサブセットの EBNF を記述します。その後、それはかなり簡単なはずです:-)
編集非常に明確にするために: 完全な仕様に準拠していないものは XML ではありません。あなたは XML 用の「独自の文法」を作成することについて話していますが、変更できない XML 用の定義済み文法が既に存在します。「XML のような」独自の構文を作成したい場合は作成できますが、サポートしない (または別の方法でサポートする) XML 構造が多数あるため、それが実際に XML であると考えている人はがっかりするでしょう。