在尝试使用词法分析器和解析器生成器时,我意识到互联网上的大多数资源(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解析?
答案 0 :(得分:2)
(书面)语言只不过是包含信息的结构化符号序列。这与你拥有的没什么不同。数据文件,配置设置文件是包含信息的所有符号序列。需要识别符号的排序和顺序,以便发现(或匹配)其中包含的信息。
但是,有不同的方法来构造符号来表示信息。组织符号的一些方法比其他方式更容易识别。通过更容易我的意思是代码更少,时间更少,算法更简单。有些更难。
你所要求的确实转换为“符号的这种示例排列是否需要识别这种复杂性的算法?”
答案是直截了当的计算机科学。我只是使用Chomsky Hierarchy来评估解析(匹配)文件中符号序列所需的算法类型。
如果没有进一步的详细解释,就可以说语言是类型2或类型3,并且当然可以由LALR解析器解析。剩下要解决的唯一问题是LALR解析器对于这种语言来说是否过于复杂。
我们可以使用常规语法(以及正则表达式)来执行此任务吗?您的文件结构示例实际上不足以回答这个问题。您需要知道结构是否可以嵌套。 BLOCK 是否可以包含 BLOCK ?
如果没有嵌套,正则表达式足够强大,并且有很多工具可以完成这项工作(例如egrep,perl,awk,sed,findstr)。