如何轻松解析自定义编程语言

本文关键字:自定义 编程语言 何轻松 | 更新日期: 2023-09-27 17:54:52

我希望开发一种工具,该工具将采用简化的代码格式:

MyObject
{
    [Get, Construct]
    String name;
    [Get, Construct]
    String description;
    [Get, Set]
    Boolean isAlive;
}

将输出java/c#代码,如:

public class MyObject {
    public MyObject(
            String name,
            String description) {
        this.name = name;
        this.description = description;
    }
    public String getName() {
        return this.name;
    }
    public String getDescription() {
        return this.description;
    }
    public Boolean getIsAlive() {
        return this.isAlive;
    }
    public Boolean setIsAlive(
            Boolean isAlive) {
        this.isAlive = isAlive;
    }

    private String name;
    private String description;
    private Boolean isAlive;
}

这样做的目的基本上是让我的生活更轻松,因为我最近做的很多事情都是制作对象,这些对象只是我们项目逻辑模型中的事物的简单反射。

我已经知道我将如何写输出,但是我只是想知道如果;

A)有什么工具已经做这种事情了吗?B)周围是否有库(c#或java),这将有助于解析输入语言?我知道它是一种自定义语言,但它与c#有很多相似之处。我想知道有没有什么办法可以节省我的时间?

如何轻松解析自定义编程语言

我对Xtext有很多很好的体验,它是一个官方的eclipse项目。它提供了许多现成的有用特性,拥有一个相当活跃的社区,易于扩展/自定义,并且文档记录良好。Xtext基于语法定义生成自定义DSL环境,并支持eclipse本身、intellJ和web环境——更多信息:https://eclipse.org/Xtext/

还有https://www.jetbrains.com/mps/,它提供了一个类似的解决方案来解决同样的问题。一个亮点可能是投影编辑。

这两种工具都在另一个抽象层次上工作,而不是使用ANTLR,并提供了许多解决方案,包括针对您的目标语言创建自定义生成器来生成例如代码-一旦您进入并且它符合您的需求,它将使您的生活变得更轻松。

您基本上定义了您自己的特定于领域的语言。如果你想沿着这条路走下去,你可以使用像ANTLR这样的东西——你定义你的语言是如何工作的,把定义输入ANTLR,它就会创建一个Java程序,它可以读取你的简单规范,并把它转换成完整的Java源代码。但是,这可能比您想要做的工作要多。

已经有一些工具可以将类规范转换为Java代码。通常,您必须使用UML来表示您的类设计,使用图形化编辑器或基于文本的描述,就像您建议的那样(例如查看这个问题的示例)。其他工具使用其他"语言"来表示您的类,但我对这些并不熟悉。

我应该指出,用UML或其他系统表示您的设计几乎和直接键入Java代码一样慢。只有当您更改很多东西,或者利用机器可读的类表示带来的其他东西(例如生成图、自动检查设计规则等)时,它才真正有用。