当前位置:首页 » 编程软件 » yacc和lex的编译

yacc和lex的编译

发布时间: 2023-08-04 00:18:35

‘壹’ 怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗

写编译器重点就是设计并实现一些数据结构和算法,语言特点太多的话,代码写起来不容易,建议你找一个小语言尝试下,不要一开始就去尝试成熟语言。否则你会在写完语法分析程序以后,遭遇到很大的困难。多数人都是在写语义分析程序的时候,突然发现自己设计的数据结构很烂,后边越写越要命。
如果你想入门编译器的话,那么可以看《编译原理与实践》,整本书先将编译器理论,然后后边教你一步步实现c-miuns(c的子集)的编译器,包括lex,yacc,都在几千行代码左右。这本书讲的比较简单易懂一点
也可以学学斯坦福大学的编译器设计公开课(aiken设计了一个叫cool的语言,专门用来教人写编译器),课程地址上面有人给了:Compilers。这门课以前有个实验环境(据说已经给了,我以前写的时候还是用的网上一个不完整的实验环境),把和编译器知识无关的内容都给你写好了,你只需要在固定的地方填上你的内容就可以写出你的编译器(不要觉得很简单哦,人家的代码写的很精巧的,读完就发现写个好编译器还是很费脑子的),另外,这个实验环境有个特点,就是在每一步都提供标准程序做对比,你可以在写完一部分以后就同标准程序对比,及时发现错误。这种方式为写编译器又提供了很多帮助
先找个小的,慢慢研究,弄懂了整体的结构再说

‘贰’ 很奇怪为什么国内没有任何组织或个人开发最底层的中文编译器呢

这是一个技术问题,你如果没读过编译原理(龙书)的话,你是看不懂下面的回答的。因为中国技术不足,没人能写出支持中文的lex和yacc。首先词法分析生成器lex,就对中文不友好,它只支持ascii字母,不支持中文。这意味着你编译器里的词汇只能是英文单词,不能是中文词汇。其次就是语法分析生成器yacc了,也不支持中文,只支持用英文写的语法规则,不能用中文书写。这意味着最最基本的语法规则是全英文的,这算哪门子中文编程语言。非常遗憾,中国目前没有牛人造出支持中文的lex和yacc来,否则全中文编译器一定会满天飞的,多到烂大街。为什么说多到烂大街?一个全中文的编译器其实仅仅需要修改编译器的前端词法分析器和语法分析器(语法分析器甚至无需大改动),后端直接对接开源代码即可,开源英文编译器已经烂大街了,把它们的后端移植过来就行了。但关键就是没有支持中文的自动化工具lex和yacc。
自动化这条路走不通,纯手写总可以吧。我猜测易语言就是前端纯手写的全中文编译器。你可以使用易语言,绝对可以达到你的要求。但是从技术的角度来讲,lex和yacc的技术高度远高于易语言,毕竟lex和yacc号称编译器的编译器,编译器之母。

‘叁’ (高分)求一个正确lex和yacc编的计算器(编译原理)

网上多的是,大多可以运行。关键是你要在Linux下分别将 lex和yacc文件用 flex 和 bison 编译成对应的c文件,然后在windows下用VC或者Codeblock的IDE下编写界面,连接刚才对应的c文件,生成exe交给老师。

热点内容
卖房解压担保 发布:2025-03-22 00:18:57 浏览:450
java打开页面 发布:2025-03-22 00:18:41 浏览:448
mt4ea源码 发布:2025-03-21 23:59:08 浏览:532
文件夹加密隐藏 发布:2025-03-21 23:56:24 浏览:17
setjava用法 发布:2025-03-21 23:54:59 浏览:182
spring配置的主要标签有哪些 发布:2025-03-21 23:54:57 浏览:174
python3range 发布:2025-03-21 23:42:56 浏览:347
安卓国外手机在哪个平台买 发布:2025-03-21 23:39:40 浏览:118
androidx86卡 发布:2025-03-21 23:38:06 浏览:805
linux限制访问目录权限 发布:2025-03-21 23:35:19 浏览:416