首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建通用语法和作用域框架

构建通用语法和作用域框架
EN

Software Engineering用户
提问于 2011-03-09 22:04:34
回答 2查看 255关注 0票数 2

你好,各位程序员,前几天我和我的一位同事讨论了一个项目,我很想知道其他人有什么话要说,或者这样的事情是否已经存在。

背景

有许多编程语言。有许多IDE和源代码编辑器突出显示和编辑源代码。完全和准确地遵循一种语言的规则来呈现自动完成选项和理解代码中的作用域是相当复杂的。这个任务非常复杂,以至于大多数IDE将不同的源代码编辑器作为插件来实现,这些插件常常以不同的方式一次又一次地重新实现相同的特性(netbeans)。

我可以告诉大多数IDE和源代码编辑器重新实现使用正则表达式的解析器,或者使用一些元语法诺尔形来概括地描述语言语法。这些解析器被一次又一次地实现。

问题

有人试图通过API统一或描述一组特性,并有一个一致的接口来解析各种编程语言和方言。我不是在描述IDE,而是用于解析和获取源代码中的元信息的任何程序的一致API。

我意识到各种编程语言提供了许多不同的特性,很难将它们抽象成一组特性,但我觉得这是一个值得尝试的项目。

在我看来,这可能会让口译员的作者为他们的语言保持一个核心的语法整数。Python基金会可以维护Python语法api、ANSI语法api、Oracle Java语法API等等。

示例用法

如果这是API,代码文档生成器理论上可以跨所有方言和语言在某种程度上工作。如果您的项目使用了5种不同的语言,那么一个应用程序就可以记录所有这些语言以及其中的注释和文档标记。

有人全面尝试过吗?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2011-03-09 23:02:15

一个问题是不同的语言有不同的解析需求。如果所有现有的计算机语言都有很好的LL(1)上下文无关语法,那就太好了,但是它们不是,有些语言,比如C和C++,如果没有编译器的其他部分的输入,就不能被解析。此外,在解析器出现词法分析之前,它将输入划分为标记,不同的语言将需要不同的标记化(**是C中的两个标记,Fortran中的一个)。任何足以解析所有常用计算机语言的解析器都会很慢,而且很难为其编写语法。

另一个问题是,解析器本身所能做的就是确认程序在语法上是否正确。解析器将具有附加到特定解析器产品的操作,而正是这些操作提供了语义。例如,给定a + b,解析器可以确定a+b进入一个表达式。附加的操作将确定这是将'+‘应用于'a’和'b‘的结果,并且确定这是两个变量的加法是在稍后的概念阶段。

然后是API返回什么的问题。它可以返回下一个令牌,但这不会告诉我们太多。如果要想出任何意义,比如Intellisense会用到的东西,那么它必须有更多的规范,不同的语言有不同的实体类型。为C和C++构造编写解析器,Java的finally可能会遇到问题,Haskell的monad可能会遇到真正的麻烦。编译器输出的常见的东西是某种可执行代码,通常去掉更多或全部更抽象的语义。

总之,在我看来,这是不可行的。如果您想继续使用这个想法,请尝试编写API并看看它需要什么。如果你遇到了更具体的问题,你可以在这里或者其他地方询问它们。

票数 3
EN

Software Engineering用户

发布于 2011-03-09 23:11:11

您可能需要检查:http://en.wikipedia.org/wiki/Antlr

它是一个解析几种语言的工具。有一些相关的工具和身份证明。

我有一些编译器设计的背景,正如前面的答案和许多其他人可能告诉你的那样,为几种编程语言做一个单独的A.P.I.实际上是不可能的,因为每个语法都不同。

正如您已经提到的,最实际的方法是构建一个“部分扫描器/解析器”。几个编辑器都使用它,并突出显示代码。解析器不解析整个源代码文件,而是查找特定的“关键字”或表达式。

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

https://softwareengineering.stackexchange.com/questions/56511

复制
相关文章

相似问题

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