Typefully
@forrestzh_
Log in
GPTLang
Share
•
2 years ago
•
View on X
在 ChatGPT 中实现了一门新的编程语言:GPTLang,并用这个语言写了一个排序算法。 定义了一个新的命令 `gptlc`,用来编译 GPTLang 的代码。 下图是最终的效果:让 ChatGPT 用 GPTLang 写了一个选择排序,并在命令行编译运行。 这个 thread 将会详细讲述一下是如何一步步实现这门语言的。
首先我告诉了 ChatGPT 正在实现一门新的编程语言,能不能给一些 idea 或者建议,ChatGPT 给出了 GPTLang 的一些基本特性。
定义编译器命令为 `gptlc`,并且可以使用 `gptlc file.gpt` 来进行编译。 然后让 ChatGPT 给出一些常用的编译选项:
给出两个基础的语法定义: 1. 注释,采用 # 作为注释符 2. 变量定义,关键词是 `VAR` 让后让 ChatGPT 根据语法规则给出一些例子。
然后定义了最基本的一个函数 `PT`,用来打印内容到屏幕上。 语法: PT(<value>) -> None 给出了一些例子之后,ChatGPT 很快就学会了这个函数的使用方法。
下一步是定义 Function 的语法 FUNC <function_name>(<arguments>) -> <return_values>: <function_body> 可以看到我的语法定义非常随意,并没有按照标准的 BNF 来定义,不过很显然 ChatGPT 很容易从示例中来学习具体的使用方法。
接下来是定义分支条件 并基于这个分支条件的语法写了一段简单的代码来执行,ChatGPT 已经能够输出代码的结果了。
OK,有了函数和分支条件之后,ChatGPT 能否组合这两个语法来实现一个函数? 获取两个数中更大的那一个,并返回。 很显然,ChatGPT 很好地用 GPTLang 的语法实现了,并且还给出了指示。
下一步,实现循环,这里我实现了一个类似于 Python 中 for loop 式的循环,不过在语法上有一些区别。 LOOP <iterable_object> -> <element>: <statements> 让 ChatGPT 基于这个语法实现一个打印 string 中字符到屏幕上的 function。
为了实现排序功能,我们需要一个数组的数据结构 VAR nums:arr [5, 8, 6, 3] 让 ChatGPT 写了一个打印数组并返回数组长度的函数。
实现一个把数组中所有元素相加的函数,并返回结果 ChatGPT 也很快给出实现并给出每一步的解释。
到此为止,已经定义了一些 GPTLang 的基本语法规则了,问问看 ChatGPT 还有没有什么需要添加的。 ChatGPT 给出了一些可以继续实现的功能,比如添加 user-defined data types。
OK,我并不想手动来编写 user-defined data types 的语法,那就直接让 ChatGPT 来帮我写吧。 ChatGPT 给到的语法规则和之前定义的风格也非常像,还给出了一些使用的例子。
之前都是让 ChatGPT 来帮我写,试一下直接编写一段 GPTLang 的代码,ChatGPT 能不能理解。 结果是不仅能理解,还能给出每一步的执行步骤。
有了上面的基础之后,让 ChatGPT 用 GPTLang 写了一个 selection sort 的算法实现。
最后一步,生成 GPTLang 的语法文档,这份文档甚至比我描述的还要清晰,给出了所有语法规则和示例代码。