首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于编写C语言编译器的有关问题

2012-02-29 
关于编写C语言编译器的问题我们公司自己设计了一款RISC芯片,指令大概有50条左右,assembler做好了不过最近

关于编写C语言编译器的问题
我们公司自己设计了一款RISC芯片,   指令大概有50条左右,   assembler做好了
不过最近有意购买芯片的客户看样子很多,   老板要求我们最好能提供一个C编译器,
而且最好是在gcc上改.  

我想问一下,   这个难度有多大?   可行性有多大?
能否提供一些相关的资料?

3ks   :)

[解决办法]
你能做出芯片和其对应的asm,那做C编译器应该也是事先有所心理准备的吧
芯片的提供厂商都是提供C编译器的,不过你们公司也应该是国内的龙头了吧.
虽然你说的谦虚,不过我估计没几个人敢指导你了
[解决办法]
lz公司好牛
[解决办法]
基本上只能接分
[解决办法]
C的编译器还算简单
[解决办法]
进来接分来啦 楼主公司牛,楼主也牛
[解决办法]
只能接分阿
[解决办法]
路过
[解决办法]
关注。。
[解决办法]
接分,估计上csdn很难找到你需要的指导。
[解决办法]
路过...
[解决办法]
mark ~ study
[解决办法]
相关讨论:
http://topic.csdn.net/t/20060604/10/4799040.html#
[解决办法]
编译的话,大致分为几个过程:词法分析,语法分析,语义分析,代码生成等。每个过程可以做一遍(一遍是指遍历一次输入;一开始的输入是源代码,前一个过程的输出是后一个过程的输入)或多遍,也可以多个过程合在一遍中做(如词法分析和语法分析可以在一遍中完成)。
对于LZ的情况,如果芯片指令和gcc原来的目标指令之间的对应关系比较简单的话,那么只要修改gcc代码生成的部分,用新指令替换旧指令即可。当然,首先要读懂相关部分的gcc源码。并且,修改以后可以通过交叉编译,使新gcc本身可以在芯片上运行。
此外,还有一种方法是做一个将gcc生成的旧机器码到新机器码的转换工具。用户编译时实际上时用gcc生成一个旧机器码的可执行文件,再转成新机器码的的可执行文件。提供一个命令一次完成这两步,供用户使用。(首先需要用它编译gcc源代码,生成在芯片上运行的gcc)。

虽然在理论上是可行的。但是编译器是很复杂的东西,在平台移植上有很多工作要做。因此,难度和工作量不可小觑。
[解决办法]
http://www.vscodes.com/soft/24/77/2691.html

看看这个有用不
[解决办法]
:)
[解决办法]
牛人都是过写编译器这一关的,难啊
[解决办法]


移植编译系统的过程为:
分析移植的可行性,包括:
研究系统的编译结构
总结系统的后端接口
比较系统抽象机与新平台的差距
衡量系统在新平台上移植的利/弊
设计新平台的目标机模型,包括:
确定新平台将要实现的系统抽象机子集(称之为“平台抽象机”)
选择目标机到平台抽象机的映射方案
提取实现映射方案所必须的平台功能特性
实现目标机模型到平台抽象机的映射,包括:
书写新平台的描述文件
将平台描述信息代入后端接口
交叉编译生成新平台的编译程序
自展已生成的编译程序
以上的移植过程可以采用“原型开发”的模式,其反复的过程主要开始于新平台目标机模型的设计。良好的设计应:
保证系统被正确移植到平台上
充分表现平台特性(如流水线、重复部件、寄存器窗口等)
充分利用系统算法
简洁
易修改、易扩充

在GCC的移植过程中,定义平台抽象机的一般步骤为:
定义抽象机参数核集
定义若干GCC已有的其它参数,来描述平台的一些特性
若GCC已有的参数及其组合不足以定义平台的某些重要特性,则设计新的参数(集),扩充到GCC的抽象机参数全集中;同时,将反映平台特性的代码段以条件编译的形式加入到GCC相应的算法中,使对新平台的独有操作不影响原有的系统功能(所以,GCC自称:不含有依赖于机器的代码,只含有依赖于机器参数的代码)。

设计阶段的主要任务是参数选取,以确定合适的目标机模型,来实现平台对前端语义操作的支持,兼顾平台特性的体现。实现阶段的主要任务是参数赋值;如果须添加平台特有参数,则还要书写对其操作的代码段。
加入新平台的复杂性来自参数选取。GCC抽象机的参数全集并不足以描述一切平台特性;平台的新参数不能简单地加入,而应慎重设计,在平台特性与实现难度中做折衷;参数应代表若干平台的共有特性,非常依赖于平台的参数会使系统臃肿。

参数全集中:
有些参数是不相容的:一个参数组中至多选取一个参数定义;
有些参数是配套的:一个参数组的内容要么都定义,要么都不定义;
有些参数是必选的:它们是核集的内容;
有些参数是可选的,它们要么缺省:有缺省值或缺省计算方式,要么可不必定义:如果有定义,只是为条件编译的判断,或修改缺省处理方式;
有些参数依赖于其它参数,不依赖于其它参数而被其它参数依赖的参数称为关键参数。


参数定义时应首先考虑参数核集,重点考虑关键参数。
[解决办法]
完全不懂,不过我知道有一本书叫《编译器的构造》,不知道有没有帮助
[解决办法]
楼主太牛了,仰慕ing...
结帖的时候要记得给我分哟。
[解决办法]
哦,难度是有的,不过如果你用YACC辅助的话其实还是好实现的

热点排行