第037回_意味解析を実装するための準備
»
今回と次回は準備回です。
SYMBOLトークンとして切り出したSYMBOL ('<!ENTITY')がXML文書上の正確な位置にあり(構文解析OK)、EbnfEntityDeclNodeの先頭トークンである
ことが解析できるようになりました。
もしEntityDeclの先頭で何かの処理をしたければ、
1.EbnfVisitor#visit(EntityDecl n)を追加する
2.SyntaxParserVisitor(を継承したVisitor)のEbnfEntityDeclNodeに処理を実装する
ことで意味解析ができます。
<Hoge>data</Hoge>
というXML文書のcontentがあった場合、EBNFデータツリーの
トークンを消費する際のアクションについては次のように分類できます。
1.DTDの処理の実装
1-1.DTDの内容のデータ化
1-2.DTDに関連した制約の実装
1-3.DTDの処理の実装(本体)
2.抽象構文木の生成
3.その他の制約の実装
また、
4.字句解析器より前の部分で必要となるXMLの仕様の実装
もあります。
1.今後の説明に必要な用語を定義する
2.XML知識の仕様化・実装
2-1.DTDに関連する仕様
2-1-1.DTDの内容のデータ作成
2-1-2.DTDに関連した制約の実装
2-1-3.DTDの処理の実装(本体)
2-2.DTDに関連しない仕様
2-2-1.処理の実装
3.抽象構文木の生成
となります。
意味解析の実装方針
これまでの実装によって、例えばSYMBOLトークンとして切り出したSYMBOL ('<!ENTITY')がXML文書上の正確な位置にあり(構文解析OK)、EbnfEntityDeclNodeの先頭トークンである
ことが解析できるようになりました。
もしEntityDeclの先頭で何かの処理をしたければ、
1.EbnfVisitor#visit(EntityDecl n)を追加する
2.SyntaxParserVisitor(を継承したVisitor)のEbnfEntityDeclNodeに処理を実装する
ことで意味解析ができます。
各ノードでの動作内容の分類
例えば、contentに<Hoge>data</Hoge>
というXML文書のcontentがあった場合、EBNFデータツリーの
EbnfContentNode
+EbnfElementNode
+EbnfSTagNode
+EbnfSymbolNode('<')
+EbnfNameNode(取得した文字列:Hoge)
+EbnfSymbolNode('>')
+EbnfContentNode
+EbnfElementNode
+EbnfCharDataNode(取得した文字列:data)
+EbnfETagNode
+EbnfSymbolNode('</')
+EbnfNameNode(取得した文字列:Hoge)
+EbnfSymbolNode('>')
下線太字部分でトークンを消費します。+EbnfElementNode
+EbnfSTagNode
+EbnfSymbolNode('<')
+EbnfNameNode(取得した文字列:Hoge)
+EbnfSymbolNode('>')
+EbnfContentNode
+EbnfElementNode
+EbnfCharDataNode(取得した文字列:data)
+EbnfETagNode
+EbnfSymbolNode('</')
+EbnfNameNode(取得した文字列:Hoge)
+EbnfSymbolNode('>')
トークンを消費する際のアクションについては次のように分類できます。
1.DTDの処理の実装
1-1.DTDの内容のデータ化
1-2.DTDに関連した制約の実装
1-3.DTDの処理の実装(本体)
2.抽象構文木の生成
3.その他の制約の実装
また、
4.字句解析器より前の部分で必要となるXMLの仕様の実装
もあります。
今後の解説予定の項目
今後の解説予定の項目は1.今後の説明に必要な用語を定義する
2.XML知識の仕様化・実装
2-1.DTDに関連する仕様
2-1-1.DTDの内容のデータ作成
2-1-2.DTDに関連した制約の実装
2-1-3.DTDの処理の実装(本体)
2-2.DTDに関連しない仕様
2-2-1.処理の実装
3.抽象構文木の生成
となります。
コメント
コメントを投稿する
SpecialPR