免费注册 查看新帖 |

Chinaunix

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

C语言的词法与语法 [复制链接]

论坛徽章:
0
发表于 2007-01-25 10:37 |显示全部楼层
好像是yacc之类的语法?

论坛徽章:
0
发表于 2007-01-25 11:00 |显示全部楼层
原帖由 iwolcbao 于 2007-1-25 09:06 发表于 10楼  
hehe,看了都不懂,这个要用什么编译器呀?
编译原理吗? 没有学过,来凑个热闹!



第一个是lex文件(say  demo.l), 第二个是yacc/bison文件(say parse.y);

则:

1, #flex demo.l   //then file `lex.yy.c' produced

2, #bison -d parse.y   //then file `parse.tab.h' and `parse.tab.c' produced

3, #gcc parse.tab.c lex.yy.c -lfl  //then file `a.out' produced-- `-lfl' means linking to lib flex

这样产生的a.out程序, 就是一个C编译器^_^  -- 个人理解,敬请指正。

论坛徽章:
0
发表于 2007-02-28 18:52 |显示全部楼层
不是吧。这样就能做个C编译器了。

论坛徽章:
0
发表于 2007-02-28 22:05 |显示全部楼层
这样就使一个简单的非优化C编译器了,只是依赖yacc捎带的的语义动作,不太好。

顺便说一下,我从网上下的,用yacc编译有错,看了半天也不明白错到哪儿了,删之。

论坛徽章:
0
发表于 2007-02-28 22:20 |显示全部楼层
原帖由 mingyanguo 于 2007-1-24 15:41 发表于 7楼  
编译原理现在基本上只剩下优化了……
其他部分基本上都成熟了。
所以懂优化就是牛人了 :--)


优化是很重要的一块,现在搞得人也很多。
懂优化是牛人,往往还懂CPU设计。
还可以多层优化,机器无关优化(逻辑优化),机器有关优化。

代码生成还没有像词法、语法那样高效可用的自动化工具,仍然有很多人在研究自动代码生成。

因为程序设计语言的语义可以由文法形式化定义来限制,很多所谓的语义分析就是类型检查、绑定一类的,现在语义形式化发展有了很大进步,但是仍然不很理想,研究热情也不是非常高涨了。

编译器的设计中很核心的是中间代码的设计,这个涉及很多程序设计语言的东西,理论性非常强,要求逻辑和数学造诣很高,我一点都不明白。

编译技术中,前端的确是很成熟了,而后端的优化和代码生成还远未成熟,中间代码的设计也在不断改进(尤其是低层中间代码),但是做的人比较少(有机会、够资格做的人也很少)。

GC作为一种自动化内存管理机制,还远远未成熟,作为一种资源管理机制还有很大应用前景。

[ 本帖最后由 prolj 于 2007-3-2 07:37 编辑 ]

论坛徽章:
0
发表于 2007-03-01 14:04 |显示全部楼层
听楼上的讲解对编译原理又理解了一层^^

在用flex&bison写一个小的翻译器,始终有问题.我发现构造一个好的EBNF也是一个不小的挑战.

[ 本帖最后由 golotv 于 2007-3-1 14:05 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-03-01 16:08 |显示全部楼层
这种帖子把链接贴上来就够了吧? 如果实在要贴内容, 至少也在后面(前面?)给出原文地址, 也是对原作者的尊重.

另外, 说起 C 编译器的实现, 用 lex/yacc 或类似工具实现了词法语法解析(即使包括生成 AST), 也是只是所有工作的
一小部分, 大头还在后头呢.

[ 本帖最后由 MMMIX 于 2007-3-1 16:15 编辑 ]

论坛徽章:
0
发表于 2007-03-02 07:32 |显示全部楼层
原帖由 golotv 于 2007-3-1 14:04 发表于 16楼  
我发现构造一个好的EBNF也是一个不小的挑战.


看看Lemon的代码。很小的。

论坛徽章:
0
发表于 2007-03-02 07:45 |显示全部楼层
原帖由 MMMIX 于 2007-3-1 16:08 发表于 17楼  
这种帖子把链接贴上来就够了吧? 如果实在要贴内容, 至少也在后面(前面?)给出原文地址, 也是对原作者的尊重.

另外, 说起 C 编译器的实现, 用 lex/yacc 或类似工具实现了词法语法解析(即使包括生成 AST), 也是只是所有工作的
一小部分, 大头还在后头呢.


原文作者也是粘贴别人的

你说的大头是后来才发展起来的,优化和代码生成,也带动了语法分析的改进。在早期,使用 lex/yacc 构造出来的编译器在当时已经算比较完整了。当然,很快优化技术开始发展,代码生成也随之而变化(当然CPU的变化也影响 代码生成 的变化)

建议先搞清前端,一是比较成熟,二是比较简单,三是和机器相关性不是很大(后端很 机器)。

论坛徽章:
0
发表于 2007-03-02 23:13 |显示全部楼层
下了!不过这种情况最好打个压缩包!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP