2017-01-13 26 views
0

当我试图用词法分析器和解析器生成器弄湿我的时候,我意识到互联网上的大多数资源(教程,论坛,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解析器解析?

回答

2

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

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

你真正要翻译的是什么,“这个符号示例安排是否需要一个这种复杂度的算法才能被识别?”

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

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

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

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

+0

那么,一个块不能包含另一个块,但我简化了一下这个例子。所有的块被一个TableStart/TableEnd对包围(我编辑了这个问题)。但是这并没有改变什么,是吗? – exilit

+0

另一个问题:不要块引入某种上下文敏感性,以便它成为类型1的语言? – exilit

+0

@exilit如果一个块中的符号改变了后面那些块的语法,那就是语法随着符号匹配而改变,这只是上下文敏感的。从你的例子看来并非如此。也许你把语法和数据的语义搞混了。 –

相关问题