2

在所有编程语言的标准规范中,为什么不能直接将词法分析/布局翻译成可以插入并工作的语法?

我可以理解,它不可能适用于 Flex/Bison、Lex/Yacc、Antlr 等,而且无法使其易于阅读以供人类理解。

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

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

也许这是一个值得商榷的事情,我不知道......

谢谢,最好的问候,汤姆。

4

3 回答 3

1

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

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

于 2010-02-18T15:19:09.660 回答
1

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

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

于 2010-02-18T15:20:49.580 回答
0

我同意你的观点,但是编写标准的人不能在这方面获胜。

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

流行的(LEX、YACC 等)通常无法处理参考语法,为了简洁明了而编写,因此将是一个糟糕的(例如非)选择。

更奇特的(Earley,GLR)可能更有效,因为它们允许无限的前瞻和歧义,但更难找到。因此,如果选择了这样的特定工具,您将无法获得想要的,这是一种适用于您拥有的解析器生成器的语法。

话虽如此,DMS Software Reengineering Toolkit使用 GLR 解析器生成器。我们不必对参考语法进行大量修改以使其正常工作,并且 DMS 现在可以处理很多语言,包括众所周知的难语言,例如 C++。恕我直言,这与您可能得到的理想非常接近。

于 2010-02-18T15:32:03.037 回答