问题*
给定一些数据(文本),其中样式应用了松散定义的标记,例如:
The [blower]cat[elower] [weight 15]sat[normal] on the mat.[newline]
理想情况下,它可以表示为:
The <text class="lower">cat</text> <strong>sat</strong> on the mat.<br />
标记具有以下属性:
要求
思想
您将如何设计解析内容的数据结构或方法,以便一组规则可以帮助转换为定义良好的结构?
或者,您在解决此类问题时会看到的字段/区域的任何建议?
* 真实世界问题
答案 0 :(得分:1)
这个问题与XML同构(至少就像你到目前为止所描述的那样)。你有引入和结束标记的语法,它主要是成对的[blower] ... [elower]和[weight 15] ... [normal]偶尔会有独立的[换行符]。
因此,如果您知道如何使用标记构建XML解析器,那么您也知道如何执行此操作。
如果你不这样做,你只需要一个语法(在EBNF中)和一个解析器生成器:
document = fragment* ;
fragment = TEXT ;
fragment = '[blower]' fragment '[elower]' ;
fragment = '[weight' NATURAL ']' fragment '[normal]' ;
fragment = other_start_tag fragment other_end_tag ;
fragment = '[newline]' ;
这需要一个非常简单的词法分析器和一个非常简单的解析器。 (参见FLEX和YACC作为例子)。 通过将操作附加到语法规则(参见YACC文档),您可以将DOM构建为一组树节点,因为解析器可以运行。许多其他解析器生成器也允许您在解析时构建树。