TPL: Text Processing Library (tpl-1.0.00)
许式伟 2008-6-24文本处理 (Text Processing)
文本处理其实就是IO。故而文本处理通常可分为两块:一块是I,一块是O。I是指把文本Parse为内存数据结构(DOM),O则相反。
联想:XMLParser是I(将XML文本变为DOM),而XSLT是O(将DOM变为文本)。
I典型的模块有:
- xxxParser(如HTMLParser,XMLParser,JsonParser, etc)
- RegExp(正则表达式,非特定目的的Parser)
O典型的模块有:
- XSLT
- CTemplate (google)
- Format: printf, etc.
问题域: TPL关注什么?
TPL顾名思义,是文本处理库(或者你也可以理解为文本处理语言Text Processing Language,因为尽管它依附于C++语言,但是实际上你使用它时并不按照C++的思维考虑问题)。
TPL目前主要关注文本处理中I的问题。即将文本Parse为内存数据结构(DOM)。
TPL可以做什么?
TPL有很强的适应性。可以做简单的如进行文本分割,复杂的可以做一个语言的编译器。TPL的典型使用场景:
- 字符串分割
- 信息抽取(Information Retrieval)
- 命令行分析(Command Line Analyzer)
- 编译器(Compiler)
- …
TPL-1.0.00
TPL的核心目前主要包含:
- tpl/RegExp.h - 正则匹配文法
- tpl/Emulator.h - 一个通用虚拟机 (从根本上来讲,虚拟机和文本处理并无相关,但是一般虚拟机用于实现一门语言,而实现一门语言必然需要进行文本处理)
TPL的扩展组件,包括:
- tpl/c/Lex.h - C/C++词法
- tpl/boost/Lambda.h - TPL与Boost Lambda的粘合剂
- tpl/ext/Calculator.h - 计算器辅助模块(计算器定义:一门简单语言,它不能定义由用户来定义函数/过程,但可以有变量)
TPL的样例
See http://winx.googlecode.com/svn/trunk/tpl/examples/.
目前 tpl/RegExp.h (正则库)相关的样例有:
- simplest: 最简单TPL样例,类似Hello, world!
- grammar: 还是简单样例,稍微加了点复杂性。
- urlparams: 用TPL分析url参数。即prop1=val1&prop2=val2&prop3=val3…
- calculator: 用TPL实现一个计算器。支持+-*/、()、sin/cos/pow/max
- removecomments: 删除C++代码中的注释。
- removecomments2: 还是C++代码中的注释。但是使用了tpl/c/Lex.h扩展模块。
- includefiles: 提取C++源文件中的include文件列表。可改善下做代码依赖关系的定性分析。
目前 tpl/Emulator.h (虚拟机)相关的样例有:
- emulator: 演示我们的虚拟机汇编指令。
- variant: 演示虚拟机的类型系统。