【问题标题】:How to easily parse custom programming language如何轻松解析自定义编程语言
【发布时间】:2016-11-07 13:06:03
【问题描述】:

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

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

【问题讨论】:

  • 你的“逻辑模型”在你的脑海中,还是有某种计算机化的表示?
  • 在 Java 世界中,我们将使用 jaxb,其中“自定义语言”是 XML 模式(xsd 文件)。 Xjc 是执行代码生成的工具,它具有插件架构,因此您可以根据需要编写自己的代码生成(或者只是增加生成的默认代码)。除了 Java 代码之外,您没有理由不能编写一个可以生成 C# 代码的插件。
  • 逻辑模型基本上在我们的脑海中,或者在非机器可操作的文档中。
  • Eclipse 会为你做访问器。

标签: java c# parsing syntax


【解决方案1】:

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

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

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

【讨论】:

  • Xtext 看起来很有趣;我希望我早点知道;)
【解决方案2】:

您基本上是在定义自己的领域特定语言。如果你想走这条路,你可以使用ANTLR之类的东西——你定义你的语言是如何工作的,将定义输入ANTLR,它会创建一个Java程序,可以读取你的简单规范并将其转换为完整的Java资源。不过,这可能比您想做的还要多。

已经有一些工具可以将类规范转换为 Java 代码。通常,您必须使用 UML 来表示您的类设计,使用图形编辑器或基于文本的描述,有点像您建议的那种(例如,例如 this question)。其他工具使用其他“语言”来表示您的课程,但我对这些不是很熟悉。

我应该指出,使用 UML 或其他系统表示您的设计几乎与直接键入 Java 代码一样慢。只有在您进行大量更改或利用类的机器可读表示附带的其他内容时,它才会真正有用——例如生成图表、自动检查设计规则等。

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多