xtext_使用Xtext为Eclipse和IntelliJ开发DSL

xtext

在这篇文章中,我们将看到如何开发一种简单的语言。 我们的目标是:

  • 语言的解析器
  • IntelliJ的编辑器 。 编辑器应具有语法突出显示,验证和自动完成功能

我们还将免费提供Eclipse和Web编辑器的编辑器 ,但请包含您的兴奋之处,本文中不再赘述。

去年,我专注于学习新知识(主要是Web和ops知识),但我仍然最喜欢的一件事就是开发DSL(领域特定语言)。 我使用的第一个相关技术是Xtext :Xtext是一种出色的工具,可让您定义语言的语法并生成该语言的出色编辑器。 到目前为止,仅针对Eclipse平台进行了开发:这意味着可以使用Eclipse开发新语言,然后可以在Eclipse中安装生成的编辑器。

最近,我使用的Eclipse少了很多,所以直到现在,我对Xtext的兴趣逐渐消失,直到最后,新版本的Xtext(仍处于beta版)瞄准了IntelliJ。 因此,当我们使用Eclipse开发语言时,我们将生成插件以在IntelliJ中使用我们的语言。

我们将要看到的技术可以用于开发任何种类的语言,但是我们将把它们应用于特定的情况:AST转换。 这篇文章是为Xtext新手准备的,我现在不做任何详细介绍,我只是分享对IntelliJ目标的第一印象。 考虑到该功能目前是测试版,因此我们可以预期会有一些粗糙的边缘。

我们正在尝试解决的问题:调整ANTLR解析器以获取出色的AST

我喜欢玩解析器,而ANTLR是出色的解析器生成器。 对于像Java这样的功能强大的语言,有很多漂亮的语法。 现在,问题是Java之类的语言的语法非常复杂,并且生成的解析器会生成不易于使用的AST。 主要问题是由于如何处理优先级规则。 考虑一下Terence Parr和Sam Harwell编写的Java 8语法 。 让我们看看如何定义一些表达式:

conditionalExpression
    :   conditionalOrExpression
    |   conditionalOrExpression '?' expression ':' conditionalExpression
    ;

conditionalOrExpression
    :   conditionalAndExpression
    |   conditionalOrExpression '||' conditionalAndExpression
    ;

conditionalAndExpression
    :   inclusiveOrExpression
    |   conditionalAndExpression '&&' inclusiveOrExpression
    ;

inclusiveOrExpression
    :   exclusiveOrExpression
    |   inclusiveOrExpression '|' exclusiveOrExpression
    ;

exclusiveOrExpression
    :   andExpression
    |   exclusiveOrExpression '^' andExpression
    ;

andExpression
    :   equalityExpression
    |   andExpression '&' equalityExpression
    ;

equalityExpression
    :   relationalExpression
    |   equalityExpression '==' relationalExpression
    |   equalityExpression '!=' relationalExpression
    ;

relationalExpression
    :   shiftExpression
    |   relationalExpression '<' shiftExpression
    |   relationalExpression '>' shiftExpression
    |   relationalExpression '<=' shiftExpression
    |   relationalExpression '>=' shiftExpression
    |   relationalExpression 'instanceof' referenceType
    ;

shiftExpression
    :   additiveExpression
    |   shiftExpression '<' '<' additiveExpression
    |   shiftExpression '>' '>' additiveExpression
    |   shiftExpression '>' '>' '>' additiveExpression
    ;

additiveExpression
    :   multiplicativeExpression
    |   additiveExpression '+' multiplicativeExpression
    |   additiveExpression '-' multiplicativeExpression
    ;

multiplicativeExpression
    :   unaryExpression
    |   multiplicativeExpression '*' unaryExpression
    | 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值