资源描述:
《第2章PL0编译程序的实现编译原理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第2章PL/0编译程序的实现2.1PL/0语言描述2.2PL/0编译程序的结构2.3PL/0编译程序的词法分析2.4PL/0编译程序的语法语义分析2.5PL/0编译程序的目标代码结构和代码生成2.6PL/0编译程序的语法错误处理2.7PL/0编译程序的目标代码解释执行时的存储分配2021/9/171何为PL/0语言?PL/0语言:PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分。PL/0程序示例:CONSTA=10;VARB,C;PROCEDUREP;VARD;PROCEDUREQ;VAR
2、X;BEGINREAD(X);D:=X;WHILEX#0DOCALLP;END;BEGINWRITE(D);CALLQ;END;BEGINCALLP;END.2021/9/172PL/0程序示例CONSTA=10;(*常量说明部分*)VARB,C;(*变量说明部分*)PROCEDUREP;(*过程说明部分*)VARD;(*P的局部变量说明部分*)PROCEDUREQ;(*P的局部过程说明部分*)VARX;BEGINREAD(X);D:=X;WHILEX#0DOCALLP;END;BEGINWRITE(D
3、);CALLQ;END;BEGINCALLP;END.Q过程体p过程体主程序体2021/9/173输入圆柱的半径和高,计算一些面积、体积等varr,h,len,a1,a2,volumn;beginread(r);read(h);len:=2*3*r;a1:=3*r*r;a2:=a1+a1+len*h;volumn:=a1*h;write(len);write(a1);write(a2);write(volumn);end.2021/9/174计算最大公约数varm,n,r,q;{计算m和n的最大公约数}procedur
4、egcd;beginwhiler#0dobeginq:=m/n;r:=m-q*n;m:=n;n:=r;endend;beginread(m);read(n);{为了方便,规定m>=n}ifm5、llrec;end.2021/9/176计算sum=1!+2!+...+n!,n从控制台读入varn,m,fact,sum;{递规计算fact=m!}procedurefactorial;beginifm>0thenbeginfact:=fact*m;m:=m-1;callfactorial;end;end;begin{读入n}read(n);sum:=0;whilen>0dobeginm:=n;fact:=1;callfactorial;sum:=sum+fact;n:=n-1;end;{输出n!}write(sum);e
6、nd.2021/9/177PL/0编译程序pcode解释程序PL/0源程序注:此处的pcode代码专指PL/0的目标代码,与传统pcode有区别pcode代码2021/9/1782.1PL/0语言描述语法描述的目的:用有穷的文法形式,描述(验证)无穷的句子形式。语法描述的常用形式:非形式化描述(不规范)语法描述图:直观、易读。EBNF(扩充的巴科斯-瑙尔范式)NEXT2021/9/179PL/0语言的非形式描述数据类型只有整型标识符的有效长度是10,以字母开始的字母数字串过程无参,可嵌套(最多三层),可递归调用变量的作用域同P
7、ASCAL,常量为全局的,无标语句类型:赋值语句,if...then...,while...do...,read,write,call,复合语句begin...end,说明语句:const...,var...,procedure…13个保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd2021/9/1710PL/0语言的语法描述图(1)终结符VT语法成分中的最小单位,构成语言文法的单词。椭圆或圆圈内的单词表示VT(2)非终结符VN语法成分
8、,在书写程序时并不出现,但可一直追溯成VT表示的形式。矩形内的符号表示VN2021/9/1711程序分程序.内的文字表示语法成分(短语)或内的文字表示单词符号程序.内的文字表示语法成分(短语)语法图2021/9/1712constidentnumber=,;varident,