我正在考虑基于C创建自定义(小)编程语言(语法)。 我不明白苹果如何用[testClass runThis:true]等运算符实现objective-c;用那种语法。
如何为自定义c语言实现自定义语法
答案 0 :(得分:5)
您可能希望查看Clang(LLVM编译器的C,C ++和Obj-C前端)和Eero Programming Language,这是一种基于使用LLVM构建的Objective-C的新语言。这两个项目都是开源的。
答案 1 :(得分:2)
您需要实现解析器和词法分析器才能开始。一种方法是从K& R的“C编程语言”中获取C语法和语法,并将其用作Flex和Bison的输入来创建独立的解析器。这将解析语法上有效的C程序。之后,您可以根据需要进行调整并进行自定义。
然而,这是一个非常重要的项目,你必须准备好自己教你很多编译器。祝你好运!
答案 2 :(得分:1)
[...]
内的位基于Smalltalk的语法。
至于设计自己的语言,这是一个很大的主题。您需要熟悉context free grammars,lexical analysis,recursive descent parsers,LALR parsers,我们甚至还没有解决生成可执行代码的问题。它仍然很有趣。设计和实施可行的计算机语言是一项具有挑战性但(IMO)有益的练习。
答案 3 :(得分:1)
你必须编写一个编译器。如果您的语义适合,您可能可以直接编译为C代码;否则你还必须为你的语言的某些部分编写某种运行时,这些部分不容易直接转换为C.但是,鉴于你所说的是一种基于C语言的小语言,这可能不是问题。
你是怎么做的?哦。曼
关于writing a compiler的主题,有数十本书籍,文章,教程等。虽然编译器的任何一个部分都不是特别困难(至少对于天真的,非优化的编译器而言),但是有很多东西需要以很多不同的方式来应对,通常是彼此微妙不兼容的方式。
至少你需要一个lexer(通常是通过像flex这样的自动工具,或者像ANTLR这样的编译器套件的一部分),parser (通常通过自动工具,如Bison和前面提到的ANTLR)和code generator(通常通过手工生成)。实际上,您可能希望在解析器和代码生成器之间添加abstract syntax tree,以便为您(或其他人)提供实现各种optimizations的空间,并使代码生成更简单。
此主题有lots of books,更不用说研究论文了。玩得开心。你要做的就是挑战,但是当你把它拉下来时会有所回报。
答案 4 :(得分:0)
升级到C ++,您就可以创建DSEL(特定于域的嵌入式语言)。我不知道你要解决什么问题,但设计精良的DSEL可能比设计自己的语言和创建解析器,编译器等更方便。抓住本书的副本以获得一些见解:{{3} }