在编程语言规范中,为什么词法分析不可翻译?

时间:2010-02-18 15:14:49

标签: parsing lexical-analysis

在编程语言的所有标准规范中,为什么不能直接将词法分析/布局转换为可以插入并运行的语法?

我可以理解,不可能将它改编为Flex / Bison,Lex / Yacc,Antlr等等,并且让人类可以理解它。

但可以肯定的是,如果它是一个标准规范,它应该是一个简单的复制/粘贴语法布局,而是最终导致移位/减少错误的负载,因此可能会反击,从而产生不准确的语法。

换句话说,他们为什么不直接使用语法/解析器工具来使它可读?

也许这是一个我不知道的有争议的事情......

谢谢, 最好的祝福, 汤姆。

3 个答案:

答案 0 :(得分:1)

  

换句话说,他们为什么不这样做   它可以被a使用   语法/解析器工具直接?

标准文档旨在供人类阅读,而不是解析器生成器。

答案 1 :(得分:1)

人类很容易看到语法并知道作者的意图,但是,计算机需要在此过程中拥有更多的手。

具体地,这些规范通常不是LL(1)或LR(1)。因此,需要前瞻,需要解决冲突。没错,这可以在语言规范中完成,但它是词法分析器的源代码,而不是语言规范。

答案 2 :(得分:0)

我同意你的观点,但是那些写标准的人无法在这方面获胜。

为了使解析器生成器的词法分析器/语法直接超出标准,标准编写者必须选择一个特定的。 (COBOL标准人员在1958年做出了什么选择?)

受欢迎的(LEX,YACC等) 通常不能处理参考语法,为简洁和清晰而写,因此将是一个糟糕的(例如非)选择。

更多异国情调(Earley,GLR)可能更有效,因为它们允许无限的前瞻和模糊,但更难找到。所以如果像这样的特定工具 选择了你不会得到想要的东西,这是一个与你拥有的解析器生成器一起使用的语法。

话虽如此,DMS Software Reengineering Toolkit使用了GLR解析器生成器。我们不必按摩参考语法以使它们工作,而DMS现在可以处理许多语言,包括像C ++这样着名的语言。恕我直言,这与你可能得到的理想接近。