免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3657 | 回复: 5
打印 上一主题 下一主题

请教如何写汇编语言的产生式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-06 16:22 |只看该作者 |倒序浏览
最近在学习编译原理,要写一个汇编器。汇编语法规则类似51单片机的那种。只要有了无二义性的文法产生式,接下来才能用SLR(1)或LL(1)进行语法分析。
请问这种无二义的文法该如何写,有没有什么规则?书上只讲了类PASCAL语言的。

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [报告]
发表于 2011-12-08 11:44 |只看该作者
汇编器不用弄这么复杂的词法,语法分析,直接对照着汇编指令一条一条的翻译成机器码即可,比较难的地方是处理好重定位信息。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2011-12-09 12:55 |只看该作者
像汇编这样文法极其简单的语言,不需要用到编译原理上的这些东西.
对于定位这个问题,你只要建立一个比如hashtable这样的数据结构就可以很好的解决

论坛徽章:
0
4 [报告]
发表于 2011-12-09 15:17 |只看该作者
汇编也要先对源程序进行语法检查啊!
比如:[标号:] 操作码 [,操作数1][,操作数2][,操作数3]
例如语句ADD x,y(除了ADD,还有DIV MOV SUB...) 当我用YACC识别出这条语句后 在对应的语义动作中我该如何分门别类的写出对应的二进制码呢?每条汇编的机器码我知道的,我是想知道这样的语句该怎么写?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2011-12-10 18:43 |只看该作者
汇编也要先对源程序进行语法检查啊!
比如:[标号:] 操作码 [,操作数1][,操作数2][,操作数3]
例如语句AD ...
tom22 发表于 2011-12-09 15:17



    汇编语言里没有所谓的高级语言里才有的中缀表达式,那么用YACC去处理是大材小用了

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
6 [报告]
发表于 2011-12-11 20:01 |只看该作者
我一直想弄明白,一个语言的文法是如何设计出来的。

话说过来,我还确实见到过好几个用lex&yacc写的汇编器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP