WEB开发网
开发学院软件开发VC 一个用于格式化/统计文本的可扩展框架 阅读

一个用于格式化/统计文本的可扩展框架

 2006-07-20 11:43:59 来源:WEB开发网   
核心提示: 另外,ParseHandler中还引入了优先级的概念,一个用于格式化/统计文本的可扩展框架(3),具体实现有点类似java中的线程优先级,这么做的理由是依据实际情况而来的:如果分析的是一段代码,并且使解析过程能够一直进行下去,以尽可能多的得到经过有效解析的信息,以c++/java为例,对于

另外,ParseHandler中还引入了优先级的概念,具体实现有点类似java中的线程优先级。这么做的理由是依据实际情况而来的:如果分析的是一段代码,以c++/java为例,对于解析注释的handler和解析标识符的handler,前者的优先级显然大过后者,因为当标识符位于注释中时,仍应将之当作注释处理;另外对于解析字符串的handler而言,其优先级又是和解析注释的handler相同的,因为当注释位于字符串内时,仍应将之当作字符串处理,而当字符串位于注释内时,则应当作注释处理。在实际应用时,一般的handler只要使用NORM_PRIORITY即可,而对于处理类似注释和字符串这样的handler则要使用MAX_PRIORITY。此外,框架还预定义了一个特殊的DefaultParseHandler,其作用是当所有其它handler都无法解析当前字串时,就由它来顶替,其优先级被定义为MIN_PRIORITY。在派生你自己的handler时一般不要使用MIN_PRIORITY优先级。DefaultParseHandler的调用机会一般很少,并且其对字串的处理方式也是极其“粗鲁”的,它的调用往往意味着你所拥有的解析现有文本的handler(s)还不够齐全。

LineParser

对文本逐行逐字解析,解析完成后可以通过getTokensInfoList方法获取解析结果。你可以通过registParseHandler方法和unreigistParseHandler方法在run-time阶段动态的设置各种具体的parse handler,以适时的调整LineParser的行为。比如,你可以将一个原本解析c++程序的LineParser定制成解析汇编程序的LineParser。而实际上,前后是同一个Parser对象。

LineParser在被创建的时候会自动产生一个DefaultParseHandler,解析过程中会按优先级从高到低的顺序调用不同的handler对当前字串进行解析,直至找到一个能处理当前字串的handler,如果所有handler都无法解析当前字串,则交由DefaultParseHandler全权处理。因为每次handler解析完之后,都会修改当前位置“指针”以指向本行的下一段未解析字串,而当该handler无法处理当前字串时是不会修改位置“指针”的,所以DefaultParseHandler的定义并非多余,它的出现是为了避免潜在的死循环,并且使解析过程能够一直进行下去,以尽可能多的得到经过有效解析的信息,即使间或有DefaultParseHandler留下的“未经消化”的结果。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:一个 用于 格式化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接