Der*_*unk 3 c programming-languages
假设我想通过向C 添加一个新的原始数据类型来创建一种新的编程语言,比如说boolean.需要做什么?
编辑:我在这里不是很清楚.我想设计一种新语言,语法与C完全相同,但有一堆新的原始数据类型.这种语言应输出C代码,然后我将使用GCC编译可执行文件/目标文件.
在评论,你说你提出的语言(我称之为EXT-C,用于扩展C)是适用于小范围的人群(你自己,你的学生)在DSL,那么你将需要:
看看Cfront是一个可能的想法来源.
查看IBM Informix ESQL/C(作为IBM Informix ClientSDK或CSDK的一部分从IBM免费获得); 有一个控制编译的脚本'esql'和一个实际解析ESQL/C源并生成相应C代码的预处理器'esqlc'.程序员运行'esql'脚本来编译ESQL/C程序; 他们不会手动运行'esqlc'程序,除非他们有异常的反常和自虐条纹.
请注意,任何DSL的一个棘手部分是与调试器的集成.您可以安排预处理器生成' #line'指令,这有时会有所帮助,有时甚至会阻碍.(在我的脚本库中,我有一个注释掉的#line指令; 我在需要调试中间C代码时使用它,但仍然设法返回原始源代码.)你可以看到lex和yacc(和变体)如何在它们的输出中处理它.默认情况下(在成功编译时)让预处理器清理中间文件也是一个好主意,但要提供一个选项,以便中间文件可供检查.请注意,如果您的预处理器不保证所有输出都是有效的C  - 因为它只是将输入的一部分复制到输出而不像C编译器那样验证它 - 那么您需要确保用户(程序员)可以告诉源错误在原始文件中,即使C编译器而不是Ext-C编译器发现错误.
IBM Informix 4GL编程语言是一种完整的语言,由其主编译器完全解析,然后(过度简化)生成C代码.有一个脚本c4gl来控制编译和链接,还有一个预处理器/编译器i4glc1(因为我过度简化了i4glc2,i4glc3也是i4glc4如此).如果生成的C代码无法编译,则表明I4GL编译器中存在错误 - 这不是用户的错误.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           270 次  |  
        
|   最近记录:  |