【问题标题】:Questions about creating your own little language关于创建自己的小语言的问题
【发布时间】:2020-02-22 21:48:17
【问题描述】:

所以在你阅读这篇文章之前:知道我只是个孩子,请不要对我太苛刻。

所以我想获得一些经验,我想开始创建自己的小语言。没有什么太好的。我已经决定要使用 java。

我想在不使用已经制作好的词法分析器和解析器的情况下创建一种解释型语言。

在此之前我已经创建了一些具有自定义语法和内容的东西,然后将被转换为 c++,然后将编译 c++ 代码以给出结果。我的问题是:这真的可以称为语言吗?只需以自定义语法编写代码,然后将该代码更改为另一种语言,这样我就不必处理编译和其他东西。

第二个问题是我将如何创建一些可以处理这种编译/解释的东西,而不是依赖于另一种语言和转译之类的东西。

编辑:这是我不久前创建的一个示例,但最近在我了解它时才添加到我的 github。 https://github.com/SupremeDeity/MTL

我知道这不能被称为任何接近语言的东西。你也可以用 java/c++/python 给我建议,除此之外别无他法。我只喜欢与这 3 个人一起工作

【问题讨论】:

  • 有人吗?请问?
  • 回复:“这真的可以称为语言吗?”您提到的语言的编译器/解释器所做的只是将给定的语言翻译成机器代码,可能还会使用一些中间语言。所以我会争辩说,在技术层面上,你所描述的对我来说听起来像是一种语言。人们是否会认为它是一种“真正的”语言是另一回事。
  • Typescript 被广泛认为是一种编程语言,例如它可以编译为 Javascript。

标签: programming-languages language-design


【解决方案1】:

您可能需要为您的语言定义语法并为其编写语法。然后,您将需要编写自己的词法分析器和解析器并设计后端,即解释器和/或编译器。

既然您了解词法分析器和解析器的概念,我建议您阅读其他人的代码,看看他们是如何做到的。想到了三个资源,可能会为您提供有关如何进行的想法:

  1. MAL (Make yourself A Lisp) - 作者推荐了一个简单的appproch来开发类似LISP的语言,并一步步指导你。有趣的部分:您选择用于开发您的 MAL 版本的语言。尽管 LISP 可能不是您的菜,但每一步都非常有用,结果令人惊叹。那里甚至还有一个 Java 实现。

  2. Rosetta Code - Parse EBNF - Rosetta Code 提出了必须使用您选择的语言解决的挑战。在这个特殊的挑战中,提交的替代语言并不多。顺便说一下,缺少一个 java 实现。既然您将需要一个解析器,为什么不为 EBNF(一种描述语言的语言)提供一个解析器?

  3. Crafting Interpreters - 这是一本伟大的在线书籍,正如我们所说,正在编写中。作者涵盖了非常有趣和实用的主题。它使用 c++ 作为基础语言,但我想你在那里会感到很自在。

祝你好运!

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 2011-04-09
    • 2011-06-16
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2021-11-25
    • 2011-06-05
    相关资源
    最近更新 更多