Parsing Xtext可以用于解析通用编程语言吗?

Parsing Xtext可以用于解析通用编程语言吗?,parsing,antlr,antlr3,xtext,Parsing,Antlr,Antlr3,Xtext,我目前正在开发一种基于代理的通用编程语言(它的语法将在某种程度上受到Java的启发,我们也在这种语言中使用object) 自项目开始以来,我们一直怀疑是否使用了或。当时我们发现Xtext实现了ANTLR特性的一个子集。因此,我们决定在我们的语言中使用ANLTR,这样就不可能为我们的语言免费提供一个完整的Eclipse编辑器(Xtext提供了这么好的特性) 然而,据我所知,今年夏天Xtext项目已经完成了一项重要的工作。引用链接: Xtext有哪些限制? Sven:您几乎可以实现任何类型的编程语言

我目前正在开发一种基于代理的通用编程语言(它的语法将在某种程度上受到Java的启发,我们也在这种语言中使用object)

自项目开始以来,我们一直怀疑是否使用了或。当时我们发现Xtext实现了ANTLR特性的一个子集。因此,我们决定在我们的语言中使用ANLTR,这样就不可能为我们的语言免费提供一个完整的Eclipse编辑器(Xtext提供了这么好的特性)

然而,据我所知,今年夏天Xtext项目已经完成了一项重要的工作。引用链接:

Xtext有哪些限制?

Sven:您几乎可以实现任何类型的编程语言或DSL 用Xtext。有一个例外,那就是如果你需要这么做 被称为“语义谓词”,这是一件相当复杂的事情 我认为不值得在这里解释。真的很少有语言 我们需要这个概念。然而,最突出的例子是C/C++。我们想 在下一版本中研究该主题

这一点在以下方面也得到了加强:

什么是Xtext?无论您是想创建一种小型文本领域特定语言(DSL),还是想实现一种全面的 通用编程语言。使用Xtext,您可以创建 很快就掌握了自己的语言。如果您已经有一个现有的 语言,但它缺乏适当的工具支持,您可以使用Xtext创建 一个复杂的基于Eclipse的开发环境,提供 从现代JavaIDE中获得的编辑经验非常短 时间量。我们称Xtext为语言开发框架

如果Xtext已经摆脱了过去的限制,那么为什么仍然无法为最著名的编程语言(Java、C#等)找到复杂的Xtext语法呢


在ANTLR网站上,您可以找到大量这样的语法示例,与Xtext有关的是,我能找到的唯一示例是文档中报告的示例。所以,也许Xtext还不成熟,无法用于实现通用编程语言?我有点担心这个。。。我不会开始用Xtext重新编写语法,因为那时我才意识到它不适合这样做。

我无法说明Xtext是什么或做得好

根据我们的经验,我可以谈谈开发用于处理真实语言的健壮工具的问题,我们认为这是一个语言操作框架

首先,由于这些语言的历史演变方式,实际语言的语法分析通常涉及到一些混乱的词法分析和/或语法分析。Java非常干净。C#有上下文相关的关键字和一个类似于C的基本预处理器。C有一个成熟的预处理器。由于语法和语法模板的模糊性,C++被称为“难以解析”。COBOL相当丑陋,没有任何参考语法,并且有多种方言。如果你看PHP的话,它会把你变成石头,因为它的定义太差了。(DMS为所有这些都提供了解析器,用于实际应用程序)

但是,如果你足够努力,通常可以通过滥用词法分析器或解析器来实现你的目标(GNU家伙滥用BISY来解析C++,通过分析词表分析和符号表查找来分析C++,这是一个很难看的例子)。但是,要获得正确的语言细节需要付出大量的努力,参考手册仅仅是编译器真正接受的事实的近似值

如果Xtext有一个像样的解析引擎,那么很可能可以用Xtext实现这一点。对Xtext站点的一个简短的阅读听起来词法分析器和解析器相当不错。我没有看到任何关于“语义谓词”的东西;我们在DMS中有它们,它们是解析中一些真正黑暗角落的救生员。即使使用非常好的解析技术(我们使用GLR解析器),没有它们也很难解析COBOL数据声明(在解析过程中提取它们的嵌套结构)

你有一个有趣的问题,你的语言还没有很好的定义。这将使您的初始解析器有些混乱,您将对其进行大量修改。这里是强大的语法分析技术帮助您的地方:如果您可以轻松地修改语法,那么您可以专注于希望您的语言看起来像什么,而不是专注于打击词法分析器和语法分析器。您可以更改语言定义这一事实意味着,如果Xtext有一些限制,您可能可以调整语言语法以匹配,而无需付出巨大的代价。ANTLR确实具有与您想象的非常相似的解析语言的能力,可以模拟通常的解析器攻击量

从来没有讨论过的是真正处理语言还需要什么。您需要能够做的第一件事是构建AST,ANTLR和YACC将帮助您完成这项工作;我想Xtext也有。您还需要符号表、控制和数据流分析(本地和全局)以及将您的语言转换为其他语言(可能更可执行)的机制。只做符号表你会发现令人惊讶的困难;C++有几百页“如何查找标识符”;Java泛型比您预期的要困难得多。如果希望提供重构,您可能还希望将AST预打印回源代码。(编辑:这里ANTLR和Xtext都提供了相当于文本模板驱动的代码生成的功能)

然而,这些都是复杂的机制,即使不超过构建解析器,也需要同样多的时间。DMS存在的原因不是因为它可以解析(我们认为这就像扑克游戏中的赌注),而是因为所有其他东西都非常难