研究生课程程序语言设计原理教程第03章.ppt

上传人:laozhun 文档编号:2218590 上传时间:2023-02-01 格式:PPT 页数:26 大小:131KB
返回 下载 相关 举报
研究生课程程序语言设计原理教程第03章.ppt_第1页
第1页 / 共26页
研究生课程程序语言设计原理教程第03章.ppt_第2页
第2页 / 共26页
研究生课程程序语言设计原理教程第03章.ppt_第3页
第3页 / 共26页
研究生课程程序语言设计原理教程第03章.ppt_第4页
第4页 / 共26页
研究生课程程序语言设计原理教程第03章.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《研究生课程程序语言设计原理教程第03章.ppt》由会员分享,可在线阅读,更多相关《研究生课程程序语言设计原理教程第03章.ppt(26页珍藏版)》请在三一办公上搜索。

1、第3章 值与类型,值直接可用,计算对象以数据值的形式表示,3.1值 对事物性态的表征和度量,表征和度量必须在某个论域的抽象层次上 数据指称内含的表征和度量,名 值 上层抽象的值是下层的名 成人:老年,中年,青年 123 123 十进制约定 001111011:83 八进制约定 001010011 青年:15.25 291 十六进制约定 100100011:名 值 实现 1111 11001,类型是计算机可能实现的结构和约定对客观世界差异的刻划。同一类型的外延,即同一结构表示所有可能的值构成一个域。分类原则:同样表示结构,同样语义解释,同样的操作。同类型值运算结果:同类型。无符号整数:二进制解释

2、的值整数:符号 值,3.1.1 值与类型,浮点数:符号 阶码 尾数,程序语言中:基元(primitive)类型:整型/实(定,浮)/字符/真值/枚举结构(structured)类型:元组/数组/记录(结构)/表/串,3.1.2 字面量、变量、常量,名字操纵值,名:字面量 从名字即知类型 字面值不变 变量 符号名要声明类型 值可变 常量 符号名要声明类型 值不变 基元值的名字是地址的别名,地址值在计算机中不恒定 操纵地址的名字是指针(地址变量)float*p,x=37.32;p=,(p)203C,(x)117F,117F,37.32,续,名值可分导致 x=x+1;按名 按名取值:引用refere

3、nce 存值 左值 右值 int x 既是右值也是左值,3.1.3 程序中的求值方式,表达式中求值靠运算符函数、过程引用改变值,函数得到函数值,过程改变环境中值(也是 改变状态)。函数和过程是操作集合的概括,函数是从原始值到函数值的 映射,是一种事物的度量到另一种事物度量的联系。运算符是特殊的函数 单目运算:E 等价表示为(E)双目运算:E1E2 等价表示为(E1,E2),3.1.4 值是头等程序对象(First Class Object),程序语言中的值字面量(整、实、布尔、字符、枚举、串)复合量(记录、数组、元组、结构、表、联合、集合、文件)指针值变量引用(左值、右值)函数和过程抽象,数学

4、对象参与运算的权利是一样的,值是计算对象也要按一致性原则:可出现在表达式中并求值可作函数返回值可单独存储 可以构成复杂的数据结构可作函数参数,3.2 类型,类型定义 值的集合和值上操作集合(V,Op)类型系统 一组可直接使用的类型类型规则类型检查机制,3.2.1基本类型,基本类型:按操作行为划分的值的集合集合中元素个数叫基数#SOP1:T TOP2:T T T,3.2.2复合类型,笛卡尔积 S T=(x,y)xS,yT#(S T)=#S*#T 元组、记录,复合类型:基元值以下述数学操作复合,。u v,。(,)(,)(,),。(,)(,)(,),。a b c,S,T,S T,。u v,。righ

5、t right right,。left left v,。a b c,S,T,S+T,不相交联合 S+T=left xxS right y yt#(S+T)=#S+#T 变体记录,联合,ML中构造,续,。u v,,b,b,v,v,,。a b c,S,T,S T,映射 m:ST,ST=mxSm(x)T#(ST)=(#T)#s 数组下标类型映射为值类型 char v7 9 3 Array v=int(int(intchar)函数是以算法实现的映射,续,幂集 S=s|s S,#(S)=2#S 集合论中常规操作:成员测试、蕴含测 试、并、交、差基数测试,续,3.2.3 递归类型,表 Integer_li

6、st=Unit+integerInteger_list L=Unit+(SL)#L=用户定义递归类型 T=T 递归方程最小解#T=串 相等测试,选字符,选子串,排序定义为基本类型,长度任意,ML定义为定长字符数组 Pascal,Ada 不提供操作可变长字符数组 C定义为字符表,表操作用于串 Prolog,LISP,3.2.4 类型系统的初步,静态与动态 静 动 变量 有类型 无类型 动态简洁、灵活 参数 有类型 无类型 静态清晰、死板 值 有类型 有类型弱/强类型无类型 LISP,Smalltalk弱类型 变量有类型。类型兼容性大,系统不作检查强制类型 隐式类型强制(转换),自动截尾,补零。显

7、式 类型强制 PL/1伪强类型 静态均有类型且作检查,由于不严,导出等价准则 Pascal强类型 类型有严格定义,均作检查 Ada,类型等价 按结构等价 type A is array(range 1.100)of INTEGER;type B is array(range 1.100)of INTEGER;OA1,0A2:A;OB1,OB2:B;OC1:array(range 1.100)of INTEGER;OD1,OD2:array(range 1.100)of INTEGER;OE1:A;OA1,OA2,OB1,OB2,OC1,OD1,OD2,OE1均等价,续,按名等价 OA1,OA2

8、 是同一类型(都用A声明)OA1,OB1,OC1是不同类型(类型名为A,B,无)OD1,OD2 是同一类型(同时声明,虽无名)OD1,OC1 是不同类型(两次声明)OA1,OE1 是同一类型(虽两次声明,但同名)类型完整性准则 涉及值的类型中不能随意限定操作,力求没有第二类的值,续,3.3 表达式,表达式:操作数运算符序列;嵌套复合函数调用,3.3.1 表示法,凡经求值、比较能得出值的表示均称表达式,3.3.2 表达式种类,初等量即表达式,Ada有:4.0-字面量PI-常量引用(1.10=0.0)-数组聚集,10元素均赋0.0值(DAY=1,MONTH=OCTOBER,YEAR=1949)-记

9、录聚集 SUM-变量引用INTEGER LASE-属性表达式、求预定义INTEGER的最大值SINE(X)-函数引用COLOR(BLUE)-限定表达式,是COLOR类型中的枚举值REAL(M*N)-类型强制表达式,将整型转换为REAL(LINE_COUNT+3)-括在括号中的表达式new CELL(0,null,null)-分配算子表达式,分配CELL 类型对象并赋初值,续,其他简单表达式:“Valid code above”-初等量 not DESTROYED-因子 2*LINE_COUNT-项 B*2-4.0*A*C-简单表达式 PASSWORD(1.3)=BTV-关系表达式 COUNT

10、in SMALL_INT-关系表达式(集合元素测试)INDEX=0 or ITEM_MIT-关系表达式 聚集表达式给结构类型变量赋(初)值。Ada给出三种 表示法以方便应用。,续,续,type TABLE is array(1.10)of INTEGER;A:TABLE:=(1,2,3,1,4,5,1,0,0,0)-按位置 A:TABLE:=(1=1,2=2,3=3,-按下标名指明 4=1,5=4,6=5,7=1,others=0)A:TABLE:=TABLE(1|4|7=1,-选择指明的意义是或 2=2,3=3,5=4,6=5,others=0),续,条件表达式 if:if x y then

11、 x else y 不是命令(语句)case 表达式:case thismonth of“Feb”=if leap(thisyear)then 29 else 28|“Apr”=30|“Sep”=30|“Nov”=30|=31 块表达式 let val s=(a+b+c)*0.5 in sqrt(s*(s-a)*(s-b)*(s-c)end 命令表达式(c=getchar()!=EOF(c=getchar()=A,3.3.3 优先级和结合性,运算符优先级precedence+结合性规则associative决定了表达式计算次序优先级 单目双目算术关系逻辑 照顾数学语义先*/后+-结合性 左结合

12、右结合 照顾数学语义,3*4*2=(34)2=812=38(左结合)=(34)2=316(右接合)中缀表达式优先级可解决二义性在多语法树中取一个,A op B op C A op B op C,左接合,右接合,3.3.4类型兼容,不同类型值混合运算,人为定出计算级别,由低 层升格为高层,结果值是高层的隐式转换 弱类型 I:=R;显式转换 强类型 I:=Integer(R);强类型按名判定,不同类型名则不兼容只有子类型不同名可以兼容显式和隐式混合,type BASE is INTEGER;subtype SON_TYPE is BASE range 1.1000;-子类型type DIVERSE

13、 is new BASE range 1.1000;-派生类型A,B:BASE;C,D:SON_TYPE;E:DIVERSE;A:=B+C,-合法,结果为B类型赋给AA:=C+E;-不合法A:=C+SON_TYPE(E);-合法,有显式强制A:=E;-不合法,两个类型E:=B+BASE(E);-不合法,续,type UNIVERSE is rangetype SET is array(UNIVERSE)of Integer;.function“+”(ELEM:in UNIVERSE;A_SET:in SET)return SET;.declare A,B:UNIVRESE;S1,S:SET;begin.S1:=(A+B)+S end;,隐式,显式,续,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号