何时使用语法编写解析器与使用语言特色正则表达式

问题描述:

在我的硕士学位中,我已经看到如何编写使用ANTLR的解析器和编译器。但在现实世界中,我们经常需要解析和提取来自重要流入数据流的相关内容。每种语言都有自己的正则表达式引擎,可以方便地用它来解析数据。或者,我们可以编写一个EBNF语法,并采用像ANTLR这样的工具来自动生成解析器。后一种方法不容易出错,并且保证比前者更可靠(特别是在一些额外空间,新线路的情况下)。何时使用语法编写解析器与使用语言特色正则表达式

我只是想知道什么是之间的界线这2个世界级的时候人会去写一个完整的语法和生成自己的解析器对一个快速使用内置的语言正则表达式引擎和推出一个小解析器,可以做足够快的工作。再次,我不是在寻找争论,而是试图分析人们写作解析器的程度和方法。

如果您的输入流可通过正则表达式处理并且不复杂,则使用正则表达式。 每条记录​​都有一个插槽和值的记录流可以通过这种方式相当合理地处理。

如果流有任意嵌套的记录,那么使用正则表达式执行它是不切实际的(事实上不可能),并且您应该切换到使用BNF和解析器生成器。

+0

安全关键的应用程序,如金融和医疗保健,即使是一个小小的错误将造成严重破坏,你认为正则表达式是可取的吗?我的意思是即使对于简单的记录,可靠性又如何呢? – 2010-09-24 05:27:30

+0

如果您的语言得到很好的实施,为什么正则表达式比语言中的“if”或任何其他语句更不可靠?事实上,对于“安全至关重要”的应用,如果你真的这么认为,那么你必须证明你的所有代码都是安全的,而不仅仅是读取记录的部分,你会发现很多比你用来做记录阅读更困难。但我不确定我是否理解同一句话中的“安全关键”和“财务”;你是认真的吗? – 2010-09-24 19:35:33

+0

安全关键可以限制在医疗保健方面(许多其他方面也存在像航空等)。对不起财务不属于同一个。我的错。 – 2010-09-24 21:09:22