资源描述:
《编译原理课件第一章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器IntroductionWANGHanfeiSchoolofComputerWuhanUniversitySeptember8,2009chfwang-1/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器1程序设计语言的历史2程序设计语言的组成字符单词语句语义3编译器的结构编译器的定义编译器的结构4XL语言编译器XL语言的形式规则词法分析器的设计递归下降语法分析器的设计语义分析及代码生成chfwang-2/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器Prehistory(
2、40年代)—机器语言(GraceHopper)(Punchcard)Intel机器码写的阶乘计算程序101110000000000100000000000000000000000010111010000000100000000000000000000000000011100111011010011111110000011000001111101011111100001001000010111010111111011011000011chfwang-3/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器远古(1950)—汇编语言及汇编器用文本表示机器语言机器指
3、令用助记符表示;内存地址和指令地址用标识符表示;允许有注释。汇编器完成汇编语言到机器语言的翻译。Intel汇编语言的阶乘计算程序;;输入参数N放入寄存器EBX中;;计算结果放入寄存器EAX中Factorial:moveax,1;;初始化输出result=1movedx,2;;初始化循环参数index=2L1:cmpedx,ebx;;如果index<=N...jgL2imuleax,edx;;result乘上indexincedx;;index递增1jmpL1;;转移到循环始点L2:ret;;返回chfwang-4/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言
4、编译器复兴(1957)—算术表达式的翻译FORTRAN—FORmulaTRANslator与机器无关;数学表达式,不需要计算机专业知识即可阅读和书写;编译器完成数学表达式到汇编语言到翻译。二次方程的求解InFORTRAN:;Inassemblylanguage:D=SQRT(B*B-4*A*C)mult1,b,bsubx1,d,bX1=(-B+D)/(2*A)mult2,a,cdivx1,x1,t3X2=(-B-D)/(2*A)mult2,t2,4negx2,bsubt1,t1,t2subx2,x2,dsqrtd,t1divx2,x2,t3mult3,a,2chfwang-5
5、/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器曙光(60年代)—递归和循环ALGOL(ALGOrithmicLanguage)—算法语言的诞生Backus-Naur范式对语言形式描述;递归调用,控制结构和调用方式(传值与传名);现代程序设计语言的雏形。阶乘函数---用C语言书写Iteration(loops):Recursion:r=1;intfact(intn)for(i=2;i<=n;i++){if(n<=1)r=r*i;return1;elsereturnfact(n-1)*n;}chfwang-6/45-程序设计语言的历史程序设计语言的组成编译
6、器的结构XL语言编译器现代(80年代)—数据结构的自动表示ML—函数式程序设计语言抽象数据类型;数据在内存的表示由编译器控制;编译器管理内存的分配;说明式语言。阶乘函数---用ML语言书写letrecfactn=ifn<=1then1elsefact(n-1)*nchfwang-7/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器1程序设计语言的历史2程序设计语言的组成字符单词语句语义3编译器的结构编译器的定义编译器的结构4XL语言编译器XL语言的形式规则词法分析器的设计递归下降语法分析器的设计语义分析及代码生成chfwang-8/45-程序设计语言的历史
7、程序设计语言的组成编译器的结构XL语言编译器字符(characters)字符组成程序语言的最小单位;字符编码。ExampleASCII,EBCDIC:’Z’-’A’+1UNICODE(UCS),UTF-7,UTF-8,ISO-Latin,GB2312MIME(MultipurposeInternetMailExtensions):mpack,munpackchfwang-9/45-程序设计语言的历史程序设计语言的组成编译器的结构XL语言编译器单词(tokens)单词(tokens)一组连续的字符,程序语