除了语言之外,我应该使用解析器生成器吗?

时间:2017-01-13 08:42:46

标签: parsing bison flex-lexer lalr

在尝试使用词法分析器和解析器生成器时,我意识到互联网上的大多数资源(Tutorials,Forums,StackOverflow)只讨论语言。是因为像Flex和Bison这样的工具只适用于语言,还是因为任何可以解析的东西都被认为是一种语言?

更具体地说,我有一个以下形式的文件:

File    : Bananarama.xyz
Date    : 22.12.2017

TableStart
BlockStart
Param1       : 12
Param2       : 1.5
Param3[lbs]  : 1539
Param4[cm]   : 55
BlockEnd

BlockStart
[...]
BlockEnd
TableEnd

此文件是否适合由LALR-Parser解析?

1 个答案:

答案 0 :(得分:2)

(书面)语言只不过是包含信息的结构化符号序列。这与你拥有的没什么不同。数据文件,配置设置文件是包含信息的所有符号序列。需要识别符号的排序和顺序,以便发现(或匹配)其中包含的信息。

但是,有不同的方法来构造符号来表示信息。组织符号的一些方法比其他方式更容易识别。通过更容易我的意思是代码更少,时间更少,算法更简单。有些更难。

你所要求的确实转换为“符号的这种示例排列是否需要识别这种复杂性的算法?”

答案是直截了当的计算机科学。我只是使用Chomsky Hierarchy来评估解析(匹配)文件中符号序列所需的算法类型。

如果没有进一步的详细解释,就可以说语言是类型2或类型3,并且当然可以由LALR解析器解析。剩下要解决的唯一问题是LALR解析器对于这种语言来说是否过于复杂。

我们可以使用常规语法(以及正则表达式)来执行此任务吗?您的文件结构示例实际上不足以回答这个问题。您需要知道结构是否可以嵌套。 BLOCK 是否可以包含 BLOCK

如果没有嵌套,正则表达式足够强大,并且有很多工具可以完成这项工作(例如egrep,perl,awk,sed,findstr)。