令牌解析模式的信息来源

时间:2011-02-17 17:33:40

标签: regex parsing text tags pattern-matching

总而言之,看起来我将负责重写我工作的文本解析引擎。

所以,就像你想象的那样:一个文本块进来,本文中有自定义标签,一些简单的一次性替换,一些带内容的块,一些嵌套等等。一些标签有参数/值对,等

虽然我已编码多年,但我会说我是一名中级正则表达式用户;我是第一个承认核心文本解析不是我的强项的人。这需要快速,因此优化是一个问题。

我正在寻找关于这种解析的模式和评论的信息来源。我愿意阅读任何你提供的任何内容。在我开始考虑如何解决这个问题之前,我需要先自学。

非常感谢,提前。

5 个答案:

答案 0 :(得分:2)

如果这比使用一个人可以轻松理解的简单状态机所做的更复杂,我会建议使用工具生成标记器:flex / jflex / {{ 3}}。

如果速度是一个非常大的问题,您也可以创建一个手工制作的自顶向下解析器,或者您可以使用解析器生成器(例如etc等)。手工工艺解析器通常更快,但有可能创建一些讨厌的角落情况:)。你需要一套很好的测试用例。

我建议你从这里开始:ANTLR。查看递归下降解析(如果您的语言不是很复杂,则可以更容易手工编写并且可理解)。

答案 1 :(得分:1)

好吧,首先,正则表达式不能用于解析嵌套结构。你必须编写一个解析器。有许多工具可以帮助您,从古老的yaccantlr再到更多。查看wikipedia page

答案 2 :(得分:1)

使用Perl 6规则。他们将语法折叠成语言。相当强大。自Perl 5.10以来不称为正则表达式,即使它看起来像正则表达式。现在它是语言,代码和正则表达式不可分割的组成部分。

http://tripatlas.com/Perl_6_rules
http://www.programmersheaven.com/2/Perl6-FAQ-Regex

答案 3 :(得分:1)

您还可以使用Marpa parser,这将为您提供一般实用BNF解析的好处 - an exampleanother example

答案 4 :(得分:0)

绝对不要尝试使用正则表达式。使用解析器。如果文本是xml,那么将有许多以您喜欢的语言提供的解析器。如果它不是xml,那么你将不得不编写自己的自定义解析器。