技术宅和经济盲

Friday, April 15, 2011

关于classpath的HTML parser

我找了不少的时间,终于找到一个可以parse出DOM Level 2 HTML标准的parser。这个东东嵌在GNU classpath项目里,不过还算好分离。

今天看了一下它的parsing。它是用LL(n)文法的。也就是说,对于每一个tag / comments / ...,需要往前看n个token。自然,每次parsing的时候它都可以确定出自己的下一个文法是什么,所以是递归下降分析。

Parser里有一个validator,用来在每次parse出一个tag (or something else)的时候validate文法,同时加入丢失掉的。这个validator是依赖于一个DTD构造器的,一个很典型的例子可以看HTML_401F.java,这个DTD会对没有header和body的自动加入header和body。然后对于在前面的elements,如果可以加入header就加入,否则就加入到body里。

为了测试方便,我构造了一个没有header的DTD,放在DomHTMLParserTestingUtil里面,同时也有简单的例子。

另外,我还搞了一个Node.toString()来打出需要的node信息。后面有空的话,要把这个改成可以dump出xml文法的东西来,或者是toXML() / toProtoBuf() or something else...

今天很有成就感,这几天都很有成就感,要保持~~~

希望尽快把porting做完,并且有足够的unit tests来保证stability。以后就可以考虑更进一步的东西了。

0 Comments:

Post a Comment

<< Home