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

时间:2016-07-05 15:52:52

标签: java c# parsing syntax

我正在寻找一种工具,它将采用以下格式的简化代码:

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#有很多相似之处。我想知道是否有什么可以节省我一些时间?

2 个答案:

答案 0 :(得分:1)

我使用Xtext做了很多很好的经验,这是一个官方的eclipse项目。它具有许多有用的功能,具有非常活跃的社区,易于扩展/可定制和记录良好。 Xtext基于语法定义生成自定义DSL环境,并支持针对eclipse本身,intellJ和Web环境 - 更多信息:https://eclipse.org/Xtext/

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

这两个工具都在另一个抽象级别上工作,而不是像使用ANTLR并提供许多解决方案,包括创建针对您的单个目标语言的自定义生成器,以生成代码 - 一旦你进入并符合你的要求,它将使你的生活更轻松。

答案 1 :(得分:0)

您基本上定义了自己的特定于域的语言。如果您想沿着这条路走下去,可以使用类似ANTLR的东西 - 定义语言的工作方式,将定义提供给ANTLR,然后创建一个Java程序,可以读取您的简单规范并将其转换为完整的Java源代码。不过,这可能比你想做的更多。

已有工具将类规范转换为Java代码。通常你必须使用UML来表示你的类设计,使用图形编辑器或基于文本的描述,就像你提出的那样(例如,查看例如this question)。其他工具使用其他语言"代表你的班级,但我并不熟悉那些。

我应该指出,用UML或其他系统表示你的设计几乎和直接输入Java代码一样慢。如果你经常改变一些东西,或者利用机器可读的类表示的其他东西,例如生成图表,自动检查设计规则等,它才真正有用。