我正在考虑创建一种基于 C 的自定义(小型)编程语言(语法)。我不明白苹果如何使用 [testClass runThis:true] 等运算符实现objective-c;使用该语法。
我将如何为我的自定义 c 语言实现自定义语法
我正在考虑创建一种基于 C 的自定义(小型)编程语言(语法)。我不明白苹果如何使用 [testClass runThis:true] 等运算符实现objective-c;使用该语法。
我将如何为我的自定义 c 语言实现自定义语法
您需要先实现一个解析器和一个词法分析器。一种方法是从 K&R 的“C 编程语言”中获取 C 语法和语法,并将其用作 Flex 和 Bison 的输入以创建独立的解析器。这将解析语法上有效的 C 程序。之后,您可以根据需要对其进行调整并对其进行自定义。
然而,这是一个不平凡的项目,你必须准备好自学很多关于编译器的知识。祝你好运!
你必须编写一个编译器。如果你的语义合适,你也许可以直接编译成 C 代码;否则,您还必须为您的语言中不容易直接转换为 C 的部分编写某种运行时。但是,鉴于您正在谈论一种基于 C 的小型语言,这可能不是问题.
你怎么做呢?哦。男人。
关于编写编译器主题的书籍、文章、教程等有数十种。虽然没有一个编译器是特别困难的(至少对于幼稚的、非优化的编译器而言),但有很多东西需要用很多不同的方式来应对,通常是彼此微妙地不兼容的方式。
至少你需要一个词法分析器(通常通过像flex这样的自动化工具或作为像ANTLR这样的编译器套件的一部分)、一个解析器(通常通过像Bison和前面提到的 ANTLR 这样的自动化工具)和一个代码生成器(通常生成用手)。实际上,您可能希望在解析器和代码生成器之间添加一个抽象语法树,以便为您(或其他人)提供实现各种优化和简化代码生成的空间。
有很多关于这个主题的书籍,更不用说研究论文了。玩得开心。你正在尝试做的是具有挑战性的,但当你完成它时会有回报。
升级到 C++,您就有可能创建 DSEL(特定领域的嵌入式语言)。我不知道您要解决什么问题,但设计良好的 DSEL 可能比设计自己的语言和创建解析器、编译器等方便得多。获取本书的副本以获得一些见解:C++ 模板元编程