XText 不提供 ANTLR 的哪些功能?

发布于 2024-11-05 02:18:42 字数 222 浏览 6 评论 0原文

我刚刚遇到了非常好的工具 Xtext 来创建 DSL 以及用于编辑的 IDE。我在网上查了一下,发现有人说它不提供ANTLR的所有功能。我使用 ANTLR 作为我的解析器生成器。

我什至不确定 ANTLR 的哪些功能我需要为我的语言编写完整的解析器,但 ANTLR 已经存在了相当长的时间,并且可能支持比 Xtext 更多的功能。

任何人都可以举一些例子来说明 Xtext 语法中不能指定的内容吗?

I just came across very nice tool Xtext to create DSL as well as IDE for editing. I did some search on the web and found people saying it does not provide all the features of ANTLR. I am using ANTLR as my parser generator.

I am not even sure what features of ANTLR I will need to write complete parser for my language but ANTLR is around for quite a long time and probably supports more features than Xtext.

Can anyone please give some examples of what CANNOT be specified in a Xtext grammar?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不知在何时 2024-11-12 02:18:42

您不能在 Xtext 语法中指定语义谓词。此外,不可能在 Xtext 中包含任意操作(读取:目标语言代码块)。唯一受支持的目标平台是 Java。

好消息是,Xtext 通过引入这些约束而获得了巨大的好处,例如,您将获得一个解解析器,它允许序列化与您的语法匹配的任意模型/语法图。说到语法图,使用 Xtext,您将获得适合您的语言的类型化 AST,您可以在 IDE 中进行编辑。

Xtext 表示中唯一的语法特征是无序组。也就是说,您可以直接表达语法中的某些元素可能以任意顺序出现,但每个元素只能出现一次。如果您考虑 java 修饰符,这可能会非常方便:

  visibility=('public'|'private') // this is a mandatory assignment
& abstractOrFinal=('abstract'|'final')? // this is optional
& static?='static'? // this will become a boolean value in your ast

请查看 Xtext 文档 了解更多详细信息语法语言。

You cannot specify semantic predicates in an Xtext grammar. Furthermore it's not possible to include arbitrary actions (read: target language code blocks) with Xtext. The only supported target platform is Java.

The good news is, that Xtext gains great benefit by inducing these constraints, e.g. you'll get an unparser that allows to serialize arbitrary models / syntax graphs that match your grammar. Speaking about syntax graphs, with Xtext you'll get a typed AST for your language that you can edit in your IDE.

A grammar feature that is unique in Xtext's representation are unordered groups. That is, you can directly express that certain elements in your grammar may occur in arbitrary order but each one only once. If you think about the java modifiers, this may be very handy:

  visibility=('public'|'private') // this is a mandatory assignment
& abstractOrFinal=('abstract'|'final')? // this is optional
& static?='static'? // this will become a boolean value in your ast

Have a look at the Xtext docs for more details on the grammar language.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文