首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编程语言规范中,为什么词法分析是不可翻译的?

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

Stack Overflow用户
提问于 2010-02-18 23:14:49
回答 3查看 192关注 0票数 2

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

我可以理解,要将它改编成像Flex/Bison、Lex/Yacc、Antlr等这样的东西是不可能的,而且要让人们理解它也是不可能的。

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

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

也许这是一件我不知道的有争议的事情。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-18 23:19:10

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

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-18 23:20:50

对于人类来说,查看语法并知道作者的意图是很容易的,然而,计算机在这一过程中需要更多的手把手。

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-18 23:32:03

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

要使词法/语法直接用于非标准的解析器生成器,标准编写者必须选择一个特定的解析器生成器。(在1958年,COBOL标准的人们会做出什么样的选择?)

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

更具异国情调的(Earley,GLR)可能更有效,因为它们允许无限的先行和歧义,但更难找到。因此,如果选择了像这样的特定工具,您将得不到您想要的东西,这是一种与您拥有的解析器生成器一起工作的语法。

话虽如此,DMS Software Reengineering Toolkit还是使用了GLR解析器生成器。我们不需要太多地修改参考语法就能让它们工作,而且DMS现在可以处理很多语言,包括那些出了名的难的语言,比如C++。IMHO,这是你可能得到的最接近你的理想。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2289622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档