免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: cjaizss

【大话IT】编译器的设计其实远没想象中那么妖魔化 [复制链接]

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-08-21 18:58 |显示全部楼层
终于可以发帖了, 其实很多人都把编译器搞复杂了, 如果用复杂的工具和复杂的思路去思考问题, 问题就会更加复杂.

总的来说, 编译器技术就是将一种语法的文本解析 , 用另外一种语言来表达它的逻辑. 如果是翻译, 就是编译, 如果是解释, 就是解释器.

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
发表于 2016-08-26 09:52 |显示全部楼层
对,从简单做起,C语法太复杂,另外设计个语法简单的语言并实现之,逐步提高能力

论坛徽章:
0
发表于 2016-08-30 09:27 |显示全部楼层
1. 你平常用哪种语言编写程序?用什么编译环境?
  1. 硕士毕业第7年了,平时主要使用c/c++;辅助性的语言包括bash shell, python, ruby, lua, vimscript;这些语言我主要是用于一些需要脚本及快速开发的地方,比如程序编译(scons依赖python), ruby偶尔用来开发一些工具,lua因为我需要用lualatex,vimscript因为我需要用vim,有时候需定制化修改vim插件;java和c#很少用了,虽然很多人认为java和c#才是现代语言;对了,golang花了很多时间学习,那时候想通过它做服务端,被rob pike影响了,但最后也没怎么学以致用。
  2. 编译环境我主要使用GCC,也安装了LLVM-clang,现在主要在linux和osx上面工作和学习。
复制代码

2. 你熟悉编译原理吗,了解词法分析、语法分析、上下文无关文法、IR、LL(k)文法、LR(k)文法等术语吗?
  1. 编译原理与形式语言这门课大学学过,留在记忆里面的只有自动机,词法分析;其它的全部忘记了。工作之后抽空了解了并研究了一些这方面的知识:词法分析即lexcial analysis(scanning),编译器的第一步,生成词法单元序列;语法分析即syntax analysis(parsing),编译器的第二步,根据词法单元序列生成语法树(syntax tree),然后交给后面的语义分析去处理;上下文无关文法,LL,LR文法看过又忘了,属于形式语言里面的东西吧,能记得就是LL,LR如何更好的扫描,扫描更少次数得到生成式。
复制代码

3. 你了解过lex/yacc吗?使用它们做过分析吗?
  1. 了解过一些,包括flex,bison,还有boost里面的spirit;方便生成词法分析器,语法分析器,cc即compiler compiler;曾经要做点regex相关的东西,尝试了一点点。
复制代码

4. 你想过自己设计一种语言,并为之设计编译器吗?如果你想设计,那你该如何一步步的做呢?
  1. 想过的;尤其在我了解过llvm项目之后;llvm会让编译器设计更简单,更加模块化,包括更容易给end user使用编译器的库;比如vim的插件ycm就依赖llvm-clang;
  2. 我是想设计自己的语言,但还没有头绪;我想首先要想明白设计语言干嘛?无论为了学习还是工作;我想设计一门类似ruby的语言,我喜欢ruby的style胜过python;
  3. 我想首先我要了解一些编译器制作工具,前期尽量通过集成利用的方式来实验吧,先娱乐为主,just for fun。
复制代码

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2017-01-20 13:44 |显示全部楼层
1. 你平常用哪种语言编写程序?用什么编译环境?
   >> 我要书, 快把书给我
2. 你熟悉编译原理吗,了解词法分析、语法分析、上下文无关文法、IR、LL(k)文法、LR(k)文法等术语吗?
   >> 我要书, 快把书给我
3. 你了解过lex/yacc吗?使用它们做过分析吗?
   >> 我要书, 快把书给我
4. 你想过自己设计一种语言,并为之设计编译器吗?如果你想设计,那你该如何一步步的做呢?
   >> 我要书, 快把书给我


:luya::luya::luya::luya::luya::luya:
:luya::luya::luya::luya::luya::luya::luya::luya:
:luya::luya::luya::luya::luya::luya::luya::luya:

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
发表于 2017-01-20 15:08 |显示全部楼层
1,强烈支持楼主ing……

论坛徽章:
0
发表于 2017-06-24 22:42 |显示全部楼层
活动过了,贴子就空了。

才看到,补充几句无关的吧。

编译器是所有软件的重中之重,包括os的构建都不能离开编译器,确保编译器正确是编译器实现的首要目标,注意,这个目标不是优化。

编译器优化很复杂,很复杂, 看VLIW编译器的实现就可以理解当前VLIW的处理器基本上死光了。

lex/yacc/ bison这些已经算是古老工具了。

当前编译器源到源的编译反而是重点,例如openCL 转。。。 , verilog/VHDL转c, system-c 等。

国际上开发编译器的很多,例如 ibm, intel, microsoft, gcc, llvm , sdcc,  ...... 国内不清楚,易语言算一个?  其他定制gcc之类的还是不要算。

国内编译器看法基本上已经没有曙光了。

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2017-08-20 07:56 |显示全部楼层
gcc源码看不懂,求版主送我一本

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
发表于 2018-04-12 11:07 |显示全部楼层
很久没来了,既然看到了,我也来补充
1. 你平常用哪种语言编写程序?用什么编译环境?
C/C++,VS、KeilC和GCC
2. 你熟悉编译原理吗,了解词法分析、语法分析、上下文无关文法、IR、LL(k)文法、LR(k)文法等术语吗?
熟悉。有幸参与了一个编译器设计项目,对于机器运行代码的原理和认识有了一刀999级的提升
3. 你了解过lex/yacc吗?使用它们做过分析吗?
实操过Flex/Bison。原理很简单,发明这个人的有点不算震撼的小聪明
4. 你想过自己设计一种语言,并为之设计编译器吗?如果你想设计,那你该如何一步步的做呢?
没想过设计一种语言,更没想过为之设计编译器。我真的老了。
编程语言无外乎就是变量、计算、赋值、此外配合调用分支和循环,把所有细节都做一遍,做为自修的话,实在浪费时间。


吐槽:
国内企业和单位普遍都比较浮躁、自私、贪婪,投入成本做不立即出效益的事情是不会做的。
连政府也是,啥挣钱干啥。啥挣钱呢?纳税最多的挣钱,啥纳税最多?浮躁的暴利行业,谁干这个?无耻的单位和土豹子老板们。谁成就的他们?是我们百姓自己。为什么?还是浮躁、自私、贪婪。


给后来者一些忠告:
在这细节浩如烟海的计算机世界里,如果你是做纯软应用的,比如做WEB的或者银行证券类这种应用,纯玩应用逻辑的,大可不必浪费太多时间研究编译器实现。
如果是做性能密集应用的,比如密集计算、信号处理、图形、嵌入式等,编译器实现是绝对的必修课。

论坛徽章:
0
发表于 2018-05-09 18:22 |显示全部楼层
恕我直言编译器可不是编译原理那本书,编译器和系统密不可分,诸如LISP、BISCE、forch这样的教学型语言,pascal那么流行,最终也是停留在大学校园里,我们现在见到的所有的操作系统都有UNIX V的影子,可能win95与众不同,但是Win95开始的所有的版本采用的都是C和C++编译器构建的内核,曾经有传言,xp系统使用的是BISCE编写的大多数源代码,事实上,win10的内核仍然都是C++和C编译器构建的,由于微软不开源,谁也不知道微软这个编译器的构建原理,毋庸置疑也是当年UNIX V的386移植版改写而来的。所以说,你要想真正的成为大牛,必须吃透当年UNIX V那25000行C语言的内核源代码,那是我们现在计算机软件工业的基础。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP