语言的语法及其翻译方案

语言的语法及其翻译方案

ID:20369784

大小:108.00 KB

页数:6页

时间:2018-10-12

语言的语法及其翻译方案_第1页
语言的语法及其翻译方案_第2页
语言的语法及其翻译方案_第3页
语言的语法及其翻译方案_第4页
语言的语法及其翻译方案_第5页
资源描述:

《语言的语法及其翻译方案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、各种语言成分的语法及其翻译方案(示例)1.普通声明语句的翻译下面是声明语句的文法:P—>progid(input,output)D;SD—;D

2、List:T

3、procidD;SListid

4、idTinteger

5、real

6、arrayCof,1

7、^T\recordDC[num]C£声明语句的翻译模式:P—>progid(input,output){offset:=0}£>;SD->D-DT{enter(6.name,T.type,offset);offset..=offset+T.width}F

8、—>integer{r./>/?e:=integer,T.width:=4}7—>real{7'./>7?e=realT.width:=8}7—>array[num]ofT{T.type:=array(num.va/,T'.type、;T.vidth'=mm.val^T.width}T^]T{T.type=pointer(T.type)T.width:=4}2.嵌套过程中声明语句的翻译嵌套过程声明语句的产生式。尸一>progid(input,output)D;SD^D;Z)

9、id:

10、Tprocid;£>;S(7.1)嵌套过程声明语句的翻译模式:尸一>progid(input,output)MD.,S{addwiclth(top(tblptr),top(ofjkety).,pop(jblptr);pop(offset)}M^e{t:=mktable(nil)push{t,fblptr).,push(Q,offset)}D—Z)—>procid;ND];S{t:=top(jblptry,addwidth(t,top(offset)y,pop(tblptr、.,pop(offse

11、t);enterproc{top(tblptrD—>id:T{enter(top(tblptr),id.name,T.type,top(offset))top(offset):=top(offset)+T.width}TV—>e{,:=wto/7Ze(fop(Z/7Z/?Zr));push(t,tblptr)pushifi,offset)}3.记录的翻译下面是生成记录类型的产生式:7"—>recordDend生成记录类型的翻译模式:TrecordLDend{T.type:=record(top

12、(tbIptr)y,T.width:=top(offset);pop(tblptr)pop^offset)}L—>e{^:=mktable(ml)push(t,tblptr);push(Q,offset、}4.赋值语句的翻译下面是典型的赋值语句文法:S—^Lefl:=EE^+E2E^E2-Ei(Ei)LeftLeft^Elist]

13、idElist^Elist,£

14、id[£(7.2)赋值语句的翻译模式:(1)S^Left:=E{ifLeft.offiset=nu\thenHeft是简单变

15、量id*/gencode(Left.addr’:=、E.addr);elsegencode(Left.addf’['Left.offsetr]1*:='E.addr)}产Left是数组元素*/(1)£—+£2{Exiddr=newtemp]gencode(E.addr^.-Ex.adclf^Ei.addr)}(2){E.acldr-E.addr}⑷E^Left{iLeft.offset=nw\thenI年Left是简单id*/E.addr=Left.addrelsebeginHeft是数组元素

16、*/E.addr=newtempgencode(E.addrLeft.addr'['Left.offset*]*)end}(5)Left^Elist]{Left.addr=newtemp;是数组元素,因此存放基址和位移*/Left.offset•尸newtetnp.,gencode(Left.addr•:=tc(Elist.an.ay)).,gencode(Left.offset、••=、Elist.adclrwiMi(E!isf.array))}⑹Left^id{Left.addr=v6.add

17、r,Left.offset:=nu\}(7)Elist^Elist,E{t=newternpm=Elist.ndim+\gencode(t*:='Elist.addr^'limit(Elist.array,w));/*计算*/gencode(tt'+*E.addr);/*计算+*/Elist.array=Elist.array;Elist.addr=tElist.ndim=in}⑻Elist—>id[E{Elist.array:=id.addr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。