请教如何写汇编语言的产生式
最近在学习编译原理,要写一个汇编器。汇编语法规则类似51单片机的那种。只要有了无二义性的文法产生式,接下来才能用SLR(1)或LL(1)进行语法分析。请问这种无二义的文法该如何写,有没有什么规则?书上只讲了类PASCAL语言的。 汇编器不用弄这么复杂的词法,语法分析,直接对照着汇编指令一条一条的翻译成机器码即可,比较难的地方是处理好重定位信息。 像汇编这样文法极其简单的语言,不需要用到编译原理上的这些东西.
对于定位这个问题,你只要建立一个比如hashtable这样的数据结构就可以很好的解决 汇编也要先对源程序进行语法检查啊!
比如:[标号:] 操作码 [,操作数1][,操作数2][,操作数3]
例如语句ADD x,y(除了ADD,还有DIV MOV SUB...) 当我用YACC识别出这条语句后 在对应的语义动作中我该如何分门别类的写出对应的二进制码呢?每条汇编的机器码我知道的,我是想知道这样的语句该怎么写? 汇编也要先对源程序进行语法检查啊!
比如:[标号:] 操作码 [,操作数1][,操作数2][,操作数3]
例如语句AD ...
tom22 发表于 2011-12-09 15:17 http://bbs.chinaunix.net/images/common/back.gif
汇编语言里没有所谓的高级语言里才有的中缀表达式,那么用YACC去处理是大材小用了 我一直想弄明白,一个语言的文法是如何设计出来的。
话说过来,我还确实见到过好几个用lex&yacc写的汇编器。
页:
[1]