在所有编程语言的标准规范中,为什么您不能直接将词法分析/布局转换为可插入和工作的语法?
我可以理解,要将它改编成像Flex/Bison、Lex/Yacc、Antlr等这样的东西是不可能的,而且要让人们理解它也是不可能的。
但可以肯定的是,如果它是一个标准规范,它应该是一个简单的复制/粘贴语法布局,而不是结果是大量的shift/reduce错误,这可能会适得其反,从而产生不准确的语法。
换句话说,为什么他们不让语法/解析器工具直接使用它呢?
也许这是一件我不知道的有争议的事情。
谢谢,最好的问候,汤姆。
发布于 2010-02-18 23:19:10
换句话说,为什么他们不让语法/解析器工具直接使用它呢?
标准文档旨在供人类阅读,而不是解析器生成器。
发布于 2010-02-18 23:20:50
对于人类来说,查看语法并知道作者的意图是很容易的,然而,计算机在这一过程中需要更多的手把手。
具体地说,这些规范通常不是LL(1)或LR(1)。因此,需要lookaheads,需要解决冲突。诚然,这可以在语言规范中完成,但它是词法分析器的源代码,而不是语言规范。
发布于 2010-02-18 23:32:03
我同意你的观点,但是编写标准的人不可能在这一点上获胜。
要使词法/语法直接用于非标准的解析器生成器,标准编写者必须选择一个特定的解析器生成器。(在1958年,COBOL标准的人们会做出什么样的选择?)
流行的(LEX、YACC等)通常不能处理参考语法,为了简洁和清晰而编写,因此将是一个糟糕的(例如非)选择。
更具异国情调的(Earley,GLR)可能更有效,因为它们允许无限的先行和歧义,但更难找到。因此,如果选择了像这样的特定工具,您将得不到您想要的东西,这是一种与您拥有的解析器生成器一起工作的语法。
话虽如此,DMS Software Reengineering Toolkit还是使用了GLR解析器生成器。我们不需要太多地修改参考语法就能让它们工作,而且DMS现在可以处理很多语言,包括那些出了名的难的语言,比如C++。IMHO,这是你可能得到的最接近你的理想。
https://stackoverflow.com/questions/2289622
复制相似问题