搜索
bottom↓
回复: 49

怎样做一个自己的编译器?比如需要做一个图形化的编译界面

[复制链接]

出0入0汤圆

发表于 2009-6-11 23:55:54 | 显示全部楼层 |阅读模式
如题,谢谢。我就想知道个概念和开发流程

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-6-12 08:43:38 | 显示全部楼层
这个只是一个IDE吧?
不少IDE使用的是GCC编译器……,就是拿一个GCC+一个外壳。
也有自己写编译器,好像KEIL的C51就是自己的编译器。

出0入0汤圆

发表于 2009-6-12 09:27:22 | 显示全部楼层
看看编译原理,再看看一些现存的ide,应该有个概念了

出0入71汤圆

发表于 2009-6-12 10:16:07 | 显示全部楼层
可以从LCC作手,如果计算机学得好可以从GCC的后端来着手,IDE界面可以用微软的VISUAL STUDIO的ADD IN进行包装,也或者用PN来做,WINAVR就是这样的

出0入0汤圆

 楼主| 发表于 2009-6-12 18:46:38 | 显示全部楼层
to:mdwct
不少IDE使用的是GCC编译器……,就是拿一个GCC+一个外壳。
-------------------------------------------------------------
能说的详细点吗?
头像被屏蔽

出0入0汤圆

发表于 2009-6-13 16:31:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-6-13 16:38:29 | 显示全部楼层
不知道楼主的目标芯片是什么?  目前没有编译器? 新研发的芯片???

但从楼主的发言看貌似不是..

出0入0汤圆

 楼主| 发表于 2009-6-13 19:35:29 | 显示全部楼层
啊,不是的,我是个初学者,概念不是很清楚。
根据楼上朋友aozima的提问,我想接着问两个问题

1.假如我就做atmega8的编译器,怎样应用gcc+一个外壳
2.针对不同的平台,有这样一种做法:目标芯片移植OS,再移植JVM(java 虚拟机),这样去做一个通用的编译器
不去考虑硬件平台,这样的编译器又是怎样用gcc+一个外壳

出0入0汤圆

发表于 2009-6-13 20:08:25 | 显示全部楼层
LZ什么水平(软件)?
如果是软件的初学者,那就把编译器如何开发的忘了吧,能0 error, 0 warning, 0 bug地开发用户程序就不错了

出0入0汤圆

发表于 2009-6-13 21:18:31 | 显示全部楼层
写complier是计算机软件学中最难的一门,他将会占用你所有的时间。
简单的说从高级语言编程机器语言需要经过下面的过程,1.词汇的分析,就是把高级语言转换成词汇标识,也就是词汇的识别。2.然后是句型的分析,把那些词汇表示组成机器的语句。3.语义的分析,就是上面的语句进行关联性分析,加上关联。4.目标code的生成,转换成相应的汇编语言,然后进一步生产机器语言
其中每一步都不是那么简单,没有相当时间研究是不可能深入的。图形的界面本来就不包括在complier里面,他不是complier的一部分。

出0入0汤圆

 楼主| 发表于 2009-6-13 22:33:49 | 显示全部楼层
感谢大家热心回答!

to:gxhblues
我几乎没有软件水平,windows编程几乎不会,只是了解。但是看到很多场合需要这方面,所以才来问问大家

to:richardbao
谢谢richardbao细心回答,你所说的compiler设计好像是从底层开发,我主要是想了解用gcc去开发适合子的编译器
请参考7楼

出0入0汤圆

发表于 2009-6-13 22:45:37 | 显示全部楼层
那么建议楼主:按8楼说的去做吧...

看来楼主还没搞明白什么是编译器
不过和"windows编程几乎不会"没什么关系... 写编译器的可以不会windows编程
但事实上是能写complier的人一定会,即使不会,也可以很快学会(当然 会成什么程度又是另外一回事了)

个人觉得真有新的处理器需要写编译器  还不如去移植GCC

出0入0汤圆

 楼主| 发表于 2009-6-13 22:58:40 | 显示全部楼层
to:aozima 残剑饮血
让你见笑了,我只对硬件有点基础,这个的确不是很清楚。怎样去移植gcc?我想你应该很了解
能说个具体流程吗?

出0入0汤圆

发表于 2009-6-13 23:18:07 | 显示全部楼层
目前我还没见人移植过GCC  因为国内目前为卡还没有研究出一款新处理器而需要编译器

打个比方吧,如果龙新真的是国内研究出来的一款新处理器...
那么你只能用机器码来写程序...(因为还没有研究出编译器)
但后来你觉得机器码太恐怖了...所以使用了助记符,并写了一个程序来把助记符转换成机器码..于是汇编编译器产生了..
...
后来你发现这款国产的芯片太强大了.用汇编不能再满足你的开发需求...
于是想写一个C编译器..但考虑到工程浩大,你决定移植开源的GCC
于是根据GCC的流程和标准  按GCC的标准重写了你的汇编编译器
并在GCC中添加你的目标芯片支持的指令..然后根据实际需要可能还要改写GCC的源码
....总共  也是一项浩大的工程 但GCC开源免费 成熟而且强大
而且预处理,语法,词法分析,优化,产生中间代码,编译,连接这些流程分工明确..
所以可能也是生产一款新的编译器的最好方法了
..................................................................
但当你正做着这个美梦的时候...发现龙芯其实就是MIPS..GCC已经支持了..

-------------------------------------
声明:以上纯属一个梦..本人并不对其负责

出0入0汤圆

发表于 2009-6-13 23:26:43 | 显示全部楼层
如果只是complier的shell,建议使用MAKEFILE script, 用图形方法生产

出0入0汤圆

 楼主| 发表于 2009-6-14 08:59:33 | 显示全部楼层
to: bbs2009
我下载了DEV C++,似乎是个简单的编译器,看什么源代码?

另:由于听说windows下的GCC是MinGW,所以我下载了一个,并百度了一下,解释为:Minimalist GNU For Windows,它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序.
实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。

下载后是许多压缩包,没有IDE界面,不知道怎么去用它像1楼mdwct所说的那样 gcc+一外壳?

(原文件名:001.JPG)

出0入0汤圆

 楼主| 发表于 2009-6-14 09:07:21 | 显示全部楼层
安装后是这样的

(原文件名:002.JPG)

出0入0汤圆

 楼主| 发表于 2009-6-14 09:14:24 | 显示全部楼层
to:aozima 残剑饮血
我的意思肯定不是为了新款片子去做一个编译器
我举个例子,希望大家能理解我的意思

例子:假如我们要开发一套简易机器人平台,而这平台是针对初中高中生的,试验中编写程序去驱动机器人动作,不可能要求他们去用keil,iar,icc等IDE去读写汇编、c程序。所以要有一专门编译器,我是想知道gcc+一外壳是怎样做成一编译器的?再在这个编译器上将自己的驱动程序做成图形化界面供学生调用。

出0入0汤圆

发表于 2009-6-14 09:41:40 | 显示全部楼层
如果用51可以到cpubbs.com去他们开发了一个labmcu像labview一样的界面和方法去编程MCU

出0入0汤圆

 楼主| 发表于 2009-6-14 10:38:05 | 显示全部楼层
希望高手高手赶紧解惑......

出0入0汤圆

发表于 2009-6-14 11:26:52 | 显示全部楼层
程序员联合开发网上有现成的代码源程序,我下载了,只是现在找不到放哪里了?

出0入0汤圆

发表于 2009-6-14 11:28:15 | 显示全部楼层
去玩arduino??

出0入0汤圆

 楼主| 发表于 2009-6-14 12:55:54 | 显示全部楼层
TO:aozima 残剑饮血
老大,你就传点经验给小弟吧,在此鞠躬谢过了

出0入0汤圆

 楼主| 发表于 2009-6-14 16:53:03 | 显示全部楼层
软件是一塌糊涂......暑假要恶补一番

出0入0汤圆

发表于 2009-6-14 20:07:21 | 显示全部楼层
首先GCC就是一个专门的C编译器,所以你在上面一直说要怎么样把GCC变成一个编译器,会让人有歧义的。通过他,我们不用任何其他工具,就可以把你的CODE通过命令行直接把他们编译成你需要的目标文件的。另外GCC是从Unix/Linux移植到windows的,所以可能会涉及到一些交叉编译和移植的问题。如果你采用MinGW移植系统,你就会和在Unix/Linux一样用命令行的GCC进行编译。
然后你需要做的就是做一个GUI外壳给学生,然后系统自动生成相应的GCC命令去编译你的那些CODE,或那些你需要编译的东西。
说的GCC的编译,就像我上面说的那样,如果想更方便的使用好GCC,G++那么makefile将会变得必不可少,他的基本功能是为你所需要最终的目标代码提供一个关系表,让GCC可以根据其中的依靠关系生产最终目标代码。但是如果你的一来文件只有一个,那你不用makefile,GCC也能够同样达成。
下面的手册可能会对你的帮助更大。

GCC中文手册:http://doc.linuxpk.com/3721.html
Makefile中文手册:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html
头像被屏蔽

出0入0汤圆

发表于 2009-6-15 00:36:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-6-15 09:17:07 | 显示全部楼层
建议使用虚拟机...

PC端将流程图编译(翻译)成虚拟指令集后,

下载到单片机(出厂时已有基本驱动程序,即虚拟机)

单片机执行虚拟指令即可运行...

出0入0汤圆

 楼主| 发表于 2009-6-15 09:31:07 | 显示全部楼层
to: richardbao
谢谢你详细的讲解,虽然我还是不怎么懂,是的,如你所说GCC是一个C编译器,我听别人所说,是利用GCC做成自己用的IDE。
MinGW我下载了,不知道怎么用???现在在考试,再过段时间我得好好啃啃它们

to:bbs2009
谢谢你的资料,我肯定会细心看的,有问题还会请教你的。呵呵

to:snoopyzz
谢谢你的回答,如果你有些基本的资料,能提供给大家学习学习吗?

出0入0汤圆

发表于 2009-6-15 09:34:48 | 显示全部楼层
因为是产品,所以不大方便公开...对不住了

其实实现起来不是很难,
但就我看LZ的贴子,似乎没什么编程基础,还是不要弄这些了,
先从基本的开始学,打好基础再说,
编程不可能一步登天的,当然有钱的话,请人做最省心了...

出0入0汤圆

发表于 2009-6-15 10:52:02 | 显示全部楼层
IDE是Integrated Development Environment的英文缩写,即合成开发环境的意思,所以他本身不是编译系统,也不能叫编译系统。而GCC,G++才是编译系统,只是没有一个IDE,但是他可以通过命令输入的方法编译你用其他任何IDE生产的C code或C++ code。
举例说明:比如你写的程序是helloworld.c,你只要在dos命令符下输入gcc -o helloworld helloworld.c就可以产生一个helloworld的可执行文件也就是说编译完成。
如果你要生产一个AVR的hex文件可以用如下的两条命令(http://www.micahcarrick.com/05-12-2006/avr-tutorial-digital-output.html,对avr-gcc没有什么研究,随便抄了一个)
avr-gcc -mmcu=atmega8 -o main.out main.c
avr-objcopy -j .text -O ihex main.out main.hex

出0入0汤圆

 楼主| 发表于 2009-6-15 17:42:00 | 显示全部楼层
感谢大家热心回答......我把自己的详情说一下,本科学自动化,现在学的导航。接触的多的是硬件,接触的所谓软件就是汇编和C51的编写调试...对于纯软,几乎没有基础。所以问的问题有些...,现在的想法是都能熟悉一下,并不一定是要做多精通。最终还是要去做实际中的应用,然后去结合要求把这些知识结合起来......

出0入0汤圆

 楼主| 发表于 2009-6-16 22:54:42 | 显示全部楼层
如果有高高手路过,还请不吝赐教!嘿嘿

出0入0汤圆

发表于 2009-6-17 10:47:46 | 显示全部楼层
你好:
请问有人成功过吗??
打算DIY PLC

出0入0汤圆

 楼主| 发表于 2009-6-17 18:20:06 | 显示全部楼层
暑假花点时间熟悉一下,再来请教大家......

出0入0汤圆

发表于 2009-6-26 08:55:36 | 显示全部楼层
tssing 阿甘:
compiler design is not easy,you can do assemble for first then do compiler,
i also want to develope plc compiler and now suceed,

出0入0汤圆

发表于 2009-6-26 09:53:29 | 显示全部楼层
或许可做个图形界面,生成C语言代码。

图形 -> C代码 -> 机器码
头像被屏蔽

出0入0汤圆

发表于 2009-9-6 12:38:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-9-6 20:15:23 | 显示全部楼层
此贴甚好

出0入0汤圆

发表于 2009-9-16 20:14:38 | 显示全部楼层
楼主的问题,有人能在这里有时间给你说清楚,你至少该支付200w咨询的费用。
因为,他已经开发出一个你需要的编译器了。

楼主到书店找本编译原理的书来看吧,如果看不懂就放弃好了。毕竟,做编译器的人是很少很少的。

出0入0汤圆

 楼主| 发表于 2009-9-17 09:15:12 | 显示全部楼层
to:【38楼】 jimo

太夸张了吧......我是既没技术又没钱...来生投胎做个大官,再报答你们...

出0入0汤圆

发表于 2009-9-25 14:20:23 | 显示全部楼层
編輯器(Compiler)是不容易的,,尤其對非資訊系本科的,,等你學會了你會發現什麼事也不能做,,因為它和CPU有關,,免費有一大堆,,
好用的確不便宜(only one licesen).

出0入0汤圆

发表于 2009-9-25 19:13:46 | 显示全部楼层
看看Arduino的IDE吧 开源的

出0入0汤圆

发表于 2009-9-26 17:15:55 | 显示全部楼层
【38楼】 jimo
楼主的问题,有人能在这里有时间给你说清楚,你至少该支付200w咨询的费用。
因为,他已经开发出一个你需要的编译器了。

楼主到书店找本编译原理的书来看吧,如果看不懂就放弃好了。毕竟,做编译器的人是很少很少的。
---------------------------------------------------------------------------------------

严重反对楼上的看法,什么200W啊,我们有一门叫complier的课程(我们计算机系最难的一门课),从0开始写一个编译器,3个月时间,最难的部分是编译器要能够处理多线程编译,当然这些设计不可以作为一个成熟产品,但也要不了200W这么多吧。当然写一个产品级的编译器需要更多的时间,因为他有更多的语法,更多的限制,但是简单单片机的编译系统是不需要多线程的,所以难度并没有提高,只是增加了更多测试的打字的时间。
光一本编译原理是不可能让你从入门到学会写编译系统的,为了学complier这门课,我们的当初学的前导课就有5门之多,简单说是一个从高级计算机语言到机器编码语言的过度,其运作过程有点像一个全文翻译系统,但是不是只有经过一次全文翻译,需要进行很多遍的翻译,最终变成机器语言。
当今计算机方面,最值钱的我想应该还是在AI设计上面,因为它还有很多东西需要突破而不是complier这种已经有完全成熟的设计体系和理论。

出0入0汤圆

发表于 2009-9-27 18:52:40 | 显示全部楼层
楼上的回答很精彩,但是国内就是没有谁能用完全成熟的设计体系和理论做出一个实用的编译器出来

出0入4汤圆

发表于 2009-9-27 19:21:24 | 显示全部楼层
基础研究最重要,有志于此的朋友加油。

出0入0汤圆

发表于 2009-10-8 01:42:45 | 显示全部楼层
看完了贴有个疑问。。。因为现在正在业余搞TI 的DSP。。对其CCS的IDE编译环境有想法。。想重新做个界面(不是自己写编译器)。有人有思路么??

说下我看了下TI 官网上的Code Composer Studio IDE 的一些资料。。没有发现有用信息。。望达人指教下

出0入0汤圆

发表于 2009-10-8 02:21:49 | 显示全部楼层
看来很多人没有理解楼主的意思。

楼主想做的东西应该有很大市场,想占有这个市场也要有这方面的知识吧。

出0入0汤圆

发表于 2010-12-8 14:27:10 | 显示全部楼层
回复【35楼】void_c 上官金虹(胡文涛)
或许可做个图形界面,生成c语言代码。
图形 -> c代码 -> 机器码
-----------------------------------------------------------------------

这样是不错,但是应用起来麻烦,做PLC的话还是一体的才好,因为PLC本身就是给工厂人员应用的,最好单一界面,否则论坛上的PLC硬件图做出来就可以是用C语言编写的PLC了

出0入0汤圆

发表于 2010-12-8 15:32:01 | 显示全部楼层
作为编译器最重要的不是界面。而是编译的方法。

出0入0汤圆

发表于 2010-12-9 10:09:02 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-16 10:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表