在编程语言的所有标准规范中,为什么不能直接将词法分析/布局转换为可以插入并运行的语法?
我可以理解,不可能将它改编为Flex / Bison,Lex / Yacc,Antlr等等,并且让人类可以理解它。
但可以肯定的是,如果它是一个标准规范,它应该是一个简单的复制/粘贴语法布局,而是最终导致移位/减少错误的负载,因此可能会反击,从而产生不准确的语法。
换句话说,他们为什么不直接使用语法/解析器工具来使它可读?
也许这是一个我不知道的有争议的事情......
谢谢, 最好的祝福, 汤姆。
答案 0 :(得分:1)
换句话说,他们为什么不这样做 它可以被a使用 语法/解析器工具直接?
标准文档旨在供人类阅读,而不是解析器生成器。
答案 1 :(得分:1)
人类很容易看到语法并知道作者的意图,但是,计算机需要在此过程中拥有更多的手。
具体地,这些规范通常不是LL(1)或LR(1)。因此,需要前瞻,需要解决冲突。没错,这可以在语言规范中完成,但它是词法分析器的源代码,而不是语言规范。
答案 2 :(得分:0)
我同意你的观点,但是那些写标准的人无法在这方面获胜。
为了使解析器生成器的词法分析器/语法直接超出标准,标准编写者必须选择一个特定的。 (COBOL标准人员在1958年做出了什么选择?)
受欢迎的(LEX,YACC等) 通常不能处理参考语法,为简洁和清晰而写,因此将是一个糟糕的(例如非)选择。
更多异国情调(Earley,GLR)可能更有效,因为它们允许无限的前瞻和模糊,但更难找到。所以如果像这样的特定工具 选择了你不会得到你想要的东西,这是一个与你拥有的解析器生成器一起使用的语法。
话虽如此,DMS Software Reengineering Toolkit使用了GLR解析器生成器。我们不必按摩参考语法以使它们工作,而DMS现在可以处理许多语言,包括像C ++这样着名的语言。恕我直言,这与你可能得到的理想接近。