c - 程序员如何在C之上开发出一种编程语言?

标签 c compiler-construction programming-languages

我有兴趣在 C 之上创建自己的编程语言,但我没有 知道从哪里开始。

所以,我研究了一下,这引起了我的注意:

A lot of languages are C-based. 

诸如C++Objective-C之类的流行编程语言,可能还有C#Java都构建在C 的顶部。(更不用说 Python)

C++ 和 Objective-C 的创建者是如何设法创建一种基于 C 的新语言,同时添加面向对象编程概念的?

最佳答案

基于 C 并不一定意味着它可以与 c 互操作。它可能只是意味着它使用与埃及括号相同的范例或类似的语法。

Java 基于 C,但也借用了 Smalltalk,它不能运行任何 C 代码。 C++ 可以调用 C 函数,因为它的编译器生成与 C 代码相同的二进制代码。一旦链接了它们的二进制文件,它们就可以互操作了。 Python 实现 CPython 首先不会生成任何二进制文件,它是一个解释性实现,这意味着它由解释器程序运行,该程序将整个解析的语法树保存在内存中。而且由于解释器本身只是一个C程序,因此它可以调用其他C函数。因此,不存在在 C 之上添加功能之类的事情。这些是不同的语言,具有不同的编译器/解释器和语法,只是借用了 c 的一些语法规则。

开始创建自己的语言的最简单方法是使用解析器生成器,如 antlr 。我将开始创建一个解释器而不是二进制编译器。也许是一个编译器,它编译成c。有关语言语法的知识至关重要。

关于c - 程序员如何在C之上开发出一种编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275211/

相关文章:

c - 将字符串数组的二维指针数组传递给C中的函数

c++ - OS X 和 Linux (C/C++) 之间的差异

c++ - Lib 文件和定义

USB 上的 C++ IDE?

c++ - Objective-C 还是 C++?

c - 为什么我们在 C 中有 unsigned 和 signed int 类型?

java - 警告 : A generic array of Object&Serializable&Comparable<? > 是为可变参数创建的

c - 我不明白 K&R 书中的 itoa()

c# - C# 中的 Foreach struct 奇怪的编译错误

c++ - 使用 files_put 上传 DropBox 返回身份验证失败