Microsoft PowerPoint - typecheck

Size: px
Start display at page:

Download "Microsoft PowerPoint - typecheck"

Transcription

1 本章内容 类型检查 编译原理和技术 张昱 中国科学技术大学计算机科学与技术学院 记号流 语法分析器 语法树语法树类型中间代码中间检查器生成器表示 符号表 语义检查中最典型的部分 类型检查 类型系统 类型检查 符号表的作用 多态函数 重载 其他的静态检查 ( 不详细介绍 ) 控制流检查 唯一性检查 关联名字检查 张昱 : 编译原理和技术 语法制导的翻译 2 程序运行时的执行错误 5.1 类型在编程语言中的作用 执行错误与安全语言 类型化语言与类型系统 类型的作用 会被捕获的错误 (trapped error) 例 : 非法指令错误 非法内存访问 除数为零 引起计算立即停止 不会被捕获的错误 (untrapped error) 例 : 下标变量的访问越过了数组的末端 ; 跳到一个错误的地址, 该地址开始的内存正好代表一个指令序列 错误可能会有一段时间未引起注意希望可执行的程序不存在不会被捕获的错误 张昱 : 编译原理和技术 语法制导的翻译 4 安全语言 良行为的 (well-behaved) 程序 没有统一的定义 如 : 良行为的程序定义为没有任何不会被捕获的程序 安全语言 (safe language) 定义 : 安全语言的任何合法程序都是良行为的 设计类型系统, 通过静态类型检查拒绝不会被捕获错误 设计正好只拒绝不会被捕获错误的类型系统是困难的 禁止错误 (forbidden error) 不会被捕获错误集合 + 会被捕获错误的一个子集 张昱 : 编译原理和技术 语法制导的翻译 5 类型化的语言 变量的类型 限定了变量在程序执行期间的取值范围 类型化的语言 (typed language) 变量都被给定类型的语言 表达式 语句等程序构造的类型都可以静态确定例如, 类型 boolean 的变量 x 在程序每次运行时的值只能是布尔值,not (x) 总有意义 no static types 未类型化的语言 (untyped language) 不限制变量值范围的语言, 如 LISP JavaScript Perl 张昱 : 编译原理和技术 语法制导的翻译 6 1

2 类型化的语言 显式类型化语言 类型是语法的一部分 隐式类型化的语言 不存在隐式类型化的主流语言, 但可能存在忽略类型信息的程序片段, 如不需要程序员声明函数的参数类型 类型系统 语言的组成部分, 其构成成分是一组定型规则 (typing rule), 用来给各种程序构造指派类型 设计目的用静态检查的方式来保证合法程序在运行时的良行为 类型系统的形式化类型表达式 定型断言 定型规则 类型检查算法通常是静态地完成类型检查 张昱 : 编译原理和技术 语法制导的翻译 7 张昱 : 编译原理和技术 语法制导的翻译 8 类型可靠的语言 良类型的程序 (well-typed program) 没有类型错误的程序, 也称合法程序 类型可靠 (type sound) 的语言 所有良类型程序 ( 合法程序 ) 都是良行为的 类型可靠的语言一定是安全的语言 语法的和静态的概念类型化语言良类型程序 动态的概念安全语言良行为的程序 若语言定义中, 除类型系统外, 没有用其它方式表示对程序的约束 张昱 : 编译原理和技术 语法制导的翻译 9 类型检查 未类型化语言可以通过运行时的类型推断和检查来排除禁止错误 类型化语言 类型检查也可以放在运行时完成, 但影响效率 一般都是静态检查, 类型系统被用来支持静态检查 通常也需要一些运行时的检查, 如数组访问越界检查 张昱 : 编译原理和技术 语法制导的翻译 10 一些实际的编程语言并不安全 禁止错误集合没有囊括所有不会被捕获的错误例 C 语言的共用体 union U { int u1; int u2; u; int p; u.u1 = 10; p = u.u2; p =0; 一些实际的编程语言并不安全 C 语言 有很多不安全但被广泛使用的特征, 如 : 指针算术运算 类型强制 参数个数可变 在语言设计的历史上, 安全性考虑不足是因为当时强调代码的执行效率 在现代语言设计上, 安全性的位置越来越重要 C 的一些问题已经在 C++ 中得以缓和 更多一些问题在 Java 中已得到解决 张昱 : 编译原理和技术 语法制导的翻译 11 张昱 : 编译原理和技术 语法制导的翻译 12 2

3 类型化语言的优点 具体语法 从工程的观点看 开发的实惠 : 较早发现错误 类型信息具有文档作用 编译的实惠 : 程序模块可以相互独立地编译 运行的实惠 : 可得到更有效的空间安排和访问方式抽象语法 变量 / 函数等声明 extern float a( ); int b; 表达式等语句 b = a( ); 更新类型信息 取类型信息进行检查 符号表 (a,extern, void float) (b,, int ) 5.2 描述类型系统的语言 类型系统的形式化 断言 推理规则 类型检查和类型推断 张昱 : 编译原理和技术 语法制导的翻译 13 类型系统的形式化 类型系统是一种逻辑系统 有关自然数的逻辑系统 自然数表达式 ( 需要定义它的语法 ) a+b, 3 良形公式 ( 逻辑断言, 需要定义它的语法 ) a+b=3, (d=3) (c<10) 推理规则前提 a < b, b < c a < c 结论 张昱 : 编译原理和技术 语法制导的翻译 15 类型系统的形式化 类型系统是一种逻辑系统 有关自然数的逻辑系统 自然数表达式 a+b, 3 良形公式 a+b=3, (d=3) (c<10) 推理规则 a < b, b < c a < c 定型环境 ( 符号表 ) 类型系统 类型表达式 int, int int 定型断言 (typing assertion) x:int x+3 : int 定型规则 (typing rules) M : int, N : int M + N : int 张昱 : 编译原理和技术 语法制导的翻译 16 断言 断言的形式 S S 的所有自由变量都声明在 中其中 是一个静态定型环境 ( 编译器实现中的符号表 ), 如 x 1 :T 1,, x n :T n S 的形式随断言形式的不同而不同 断言有三种具体形式 张昱 : 编译原理和技术 语法制导的翻译 17 断言的种类 环境断言 该断言表示 是良形的环境 将用推理规则来定义环境的语法 ( 而不是用文法 ) 语法断言 nat 在环境 下,nat 是类型表达式 将用推理规则来定义类型表达式的语法 定型断言 M : T 在环境 下, M 具有类型 T 例 : true : boolean x : nat x+1 : nat 将用推理规则来确定程序构造实例的类型 张昱 : 编译原理和技术 语法制导的翻译 18 3

4 断言的有效性 推理规则 断言的有效性 有效断言 (valid assertion) true : boolean 无效断言 (invalid assertion) true : nat 推理规则 (inference rules) 1 S 1,, n S n S 前提 (premise) 结论(conclusion) 公理 (axiom)( 前提为空 ) 推理规则 张昱 : 编译原理和技术 语法制导的翻译 19 推理规则 ( 规则名 ) ( 注释 ) 推理规则 ( 注释 ) 环境规则 (Env ) 语法规则 (Type Bool) 在环境 下, M + N 是 int 类型 定型规则 (Val +) boolean M : int, N : int M + N : int 空环境是良形的环境 boolean 是类型表达式 张昱 : 编译原理和技术 语法制导的翻译 20 类型检查 类型检查 (type checking) 用语法制导的方式, 根据上下文有关的定型规则来判定程序构造是否为良类型的程序构造的过程可以边解析边检查, 也可以在访问 AST 时进行检查 5.3 简单类型检查器的说明 类型推断 (type inference) 类型信息不完全情况下的定型判定问题例如 :f (x : t) = E 和 f (x) = E 的区别 一个简单的语言及类型系统 类型检查 张昱 : 编译原理和技术 语法制导的翻译 21 一个简单的语言 P D ; S D D ; D id : T T boolean integer array [num ] of T T T T S id := E if E then S while E do S S ; S E truth num id E mod E E [ E ] E E (E ) 例 i : integer; j : integer; j := i mod 2000 张昱 : 编译原理和技术 语法制导的翻译 23 类型系统 环境规则 (Env ) (Decl Var) T, id dom ( ), id : T 其中 id : T 是该简单语言的一个声明语句遇到一个声明语句, 则向定型环境 ( 符号表 ) 中增加一个符号定型 张昱 : 编译原理和技术 语法制导的翻译 24 4

5 类型系统 语法规则 (Type Bool) (Type Int) boolean integer (Type Void) void void 用于表示语句类型编程语言和定型断言的类型表达式并非完全一致 类型系统 语法规则 (Type Ref) (T void) 具体语法 : T (Type Array) (T void) 具体语法 :array [N] oft (Type Function) (T 1, T 2 void) T pointer(t) T, N : integer array(n, T) 定型断言中的类型表达式用的是抽象语法 T 1, T 2 T 1 T 2 (N>0) 张昱 : 编译原理和技术 语法制导的翻译 25 张昱 : 编译原理和技术 语法制导的翻译 26 类型系统 -- 定型规则 类型系统 -- 定型规则 定型规则 表达式 (Exp Truth) truth : boolean 定型规则 表达式 (Exp Mod) E 1 : integer, E 2 : integer E 1 mod E 2 : integer (Exp Num) (Exp Id) num : integer 1, id : T, 2 1, id : T, 2 id : T (Exp Index) (Exp Deref) (Exp FunCall) E 1 : array(n,t), E 2 : integer E 1 [E 2 ] : T (0 E 2 N 1) E : pointer(t) E : T E 1 : T 1 T 2, E 2 : T 1 E 1 (E 2 ) : T 2 张昱 : 编译原理和技术 语法制导的翻译 27 张昱 : 编译原理和技术 语法制导的翻译 28 类型系统 -- 定型规则 定型规则 语句 (State Assign) (T=boolean or T= integer) (State If) (State While) (State Seq) id : T, E : T id := E : void E : boolean, S : void if E then S : void E : boolean, S : void while E do S: void S 1 : void, S 2 : void S 1 ; S 2 : void 张昱 : 编译原理和技术 语法制导的翻译 29 类型检查 设计语法制导的类型检查器 设计依据 : 前面定义的类型系统 类型环境 的信息进入符号表 对类型表达式采用抽象语法具体 :array [N] of T 抽象 :array (N, T) T pointer (T) 考虑到报错的需要, 增加了类型 type_error 张昱 : 编译原理和技术 语法制导的翻译 30 5

6 类型检查 声明语句 类型检查 声明语句 D D; D //D1 D id : T {addtype (id.entry, T.type) //D2 addtype: 把类型信息填入符号表如果是在访问 AST 时进行类型检查, 该怎么做呢? 如, 可以在 exitd2 ( ast ) 中增加对 addtype 的调用如何表达多个声明 D1 呢?(lab1-3) 组织成 list ( 可以用现成的表示线性表的容器类等 ) 如何处理多个声明 D1 呢? 对 list 中元素的迭代访问 ( 可以用现成的 Iterator 等 ) 张昱 : 编译原理和技术 语法制导的翻译 31 D D; D D id : T {addtype (id.entry, T.type) T boolean {T.type = boolean (Bool,--) T integer {T.type = integer (Int, --) T T 1 {T.type = pointer(t 1.type) (Pointer,T1) T array [num] of T 1 {T.type = array(num.val, T 1.type) (Array,T1,num) T T 1 T 2 {T.type = T 1.type T 2.type (Fun,T1, T2) 如何表示不同的类型? ( 类型类别, 该类别类型的其他信息 ) 张昱 : 编译原理和技术 语法制导的翻译 32 类型检查 表达式 类型检查 表达式 E truth {E.type = boolean E num {E.type = integer E id {E.type = lookup(id.entry) 查符号表, 获取 id 的类型 E truth {E.type = boolean E num {E.type = integer E id {E.type = lookup(id.entry) E E 1 mod E 2 {E.type = if E 1.type == integer and E 2. type == integer then integer E E 1 [E 2 ] {E.type = if E 2. type == integer and E 1. type == array(s, t)thent 张昱 : 编译原理和技术 语法制导的翻译 33 张昱 : 编译原理和技术 语法制导的翻译 34 类型检查 表达式 类型转换 E E 1 { E.type =ife 1.type == pointer(t)thent E E 1 (E 2 ){E. type =ife 2. type == s and E 1. type == s t then t E E 1 op E 2 {E.type =ife 1.type == integer and E 2.type == integer then integer else if E 1.type == integer and E 2.type == real then real else if E 1.type == real and E 2.type == integer then real else if E 1.type == real and E 2.type == real then real 张昱 : 编译原理和技术 语法制导的翻译 35 张昱 : 编译原理和技术 语法制导的翻译 36 6

7 类型检查 语句 S id := E { if (id.type == E.type && E.type {boolean, integer) S.type = void; else S.type = type_error; S if E then S 1 {S. type = if E. type == boolean then S 1. type S while E do S 1 {S.type = if E.type == boolean then S 1. type S S 1 ; S 2 {S. type = if S 1. type == void and S 2.type== void then void 张昱 : 编译原理和技术 语法制导的翻译 37 类型检查 程序 P D; S {P. type = if S. type == void then void 类型检查器的实现 一般是对语法树进行类型检查设计实现的关键 : 符号表的设计 : 如何表示不同的类型 语法树的 Visitor 设计 回顾 :ANTLR 会生成与标签对应的语法结构的 enter 和 exit 方法 张昱 : 编译原理和技术 语法制导的翻译 38 例题 1 编译时的控制流检查的例子 main() { printf( \n%ld\n,gcd(4,12)); continue; 编译时的报错如下 : continue.c: In function main : continue.c:3: continue statement not within a loop 张昱 : 编译原理和技术 语法制导的翻译 39 例题 2 编译时的唯一性检查的例子 main() { int i; switch(i){ case 10: printf( %d\n, 10); break; case 20: printf( %d\n, 20); break; case 10: printf( %d\n, 10); break; 编译时的报错如下 : switch.c: In function main : switch.c:6: duplicate case value switch.c:4: this is the first entry for that value 张昱 : 编译原理和技术 语法制导的翻译 40 例题 3 C 语言 称 & 为地址运算符,&a 为变量 a 的地址 数组名代表数组第一个元素的地址问题 : 如果 a 是一个数组名, 那么表达式 a 和 &a 的值都是数组 a 第一个元素的地址, 它们的使用是否有区别? 用四个 C 文件的编译报错或运行结果来提示 例题 3 typedef int A[10][20]; Aa; A *fun() { return(a); 该函数在 Linux 上用 gcc 编译, 报告的错误如下 : 第 5 行 :warning: return from incompatible pointer type 张昱 : 编译原理和技术 语法制导的翻译 41 张昱 : 编译原理和技术 语法制导的翻译 42 7

8 例题 3 typedef int A[10][20]; Aa; A *fun() { return(&a); 该函数在 Linux 上用 gcc 编译时, 没有错误 例题 3 typedef int A[10][20]; typedef int B[20]; Aa; B *fun() { return(a); 该函数在 Linux 上用 gcc 编译时, 没有错误 张昱 : 编译原理和技术 语法制导的翻译 43 张昱 : 编译原理和技术 语法制导的翻译 44 例题 3 typedef int A[10][20]; Aa; fun() { printf( %d,%d,%d\n, a, a+1, &a+1); 例题 3 结论对一个 t 类型的数组 a[ i 1 ][ i 2 ] [ i n ] 来说, 表达式 a 的类型是 : pointer(array(0.. i 2 1, array(0.. i n 1, t) )) main() { fun(); 该程序的运行结果是 : , , 表达式 &a 的类型是 : pointer(array(0.. i 1 1, array(0.. i n 1, t) )) 张昱 : 编译原理和技术 语法制导的翻译 45 张昱 : 编译原理和技术 语法制导的翻译 46 类型表达式的等价 5.4 类型表达式的等价 类型表达式的命名 名字等价 结构等价 记录类型的定义 对类型表达式命名 = 如何解释类型表达式相同? 结构等价 名字等价 是类型表达式的一个语法约定, 而不是引入新的类型 typedef cell *link; link next; link last; cell *p; cell *q, *r; 张昱 : 编译原理和技术 语法制导的翻译 48 8

9 结构等价 结构等价 无类型名时, 两个类型表达式完全相同 有类型名时, 用类型名所定义的类型表达式代换它们, 所得表达式完全相同 ( 类型定义无环时 ) typedef cell *link; link next; link last; cell *p; next, last, p, q 和 r 结构等价 cell *q, *r; 张昱 : 编译原理和技术 语法制导的翻译 49 结构等价测试 sequiv(s, t) ( 无类型名时 ) if s 和 t 是相同的基本类型 then return true else if s == array(s 1, s 2 ) and t == array(t 1, t 2 ) then return sequiv(s 1, t 1 ) and sequiv(s 2, t 2 ) else if s == s 1 s 2 and t == t 1 t 2 then return sequiv(s 1, t 1 ) and sequiv(s 2, t 2 ) else if s == pointer (s 1 )andt == pointer(t 1 )then return sequiv(s 1, t 1 ) else if s == s 1 s 2 and t == t 1 t 2 then return squiv(s 1, t 1 ) and sequiv(s 2, t 2 ) else return false 张昱 : 编译原理和技术 语法制导的翻译 50 名字等价 名字等价 把每个类型名看成是一个可区别的类型 两个类型表达式不做名字代换就结构等价 typedef cell *link; link next; link last; next 和 last 名字等价 cell *p; p, q 和 r 名字等价 cell *q, *r; 类型表达式的等价 Pascal 语言的许多实现用隐含的类型名和每个声明的 标识符联系起来 type link = cell; type link = cell; var next : link; np = cell; last : link; nqr = cell; p : cell; var next : link; q, r : cell; last : link; p : np; p 与 q 和 r 不是名字等价 q : nqr; r : nqr; 张昱 : 编译原理和技术 语法制导的翻译 51 张昱 : 编译原理和技术 语法制导的翻译 52 记录类型 记录类型 记录类型可看成其各个域类型的积类型 记录和积之间的主要区别是记录的域被命名例如,C 语言的记录类型 typedef struct { int address; char lexeme [15 ]; row; 的类型表达式是 record(address : int, lexeme : array(15, char) ) 张昱 : 编译原理和技术 语法制导的翻译 53 记录类型 定型规则 (Type Record) (l i 是有区别的 ) T 1,, T n record(l 1 :T 1,, l n :T n ) (Val Record) (l i 是有区别的 ) M 1 :T 1,, M n : T n record (l 1 =M 1,, l n =M n ) : record (l 1 :T 1,, l n :T n ) (Val Record Select) M : record(l 1 :T 1,, l n :T n ) M.l j : T j (j 1..n) 张昱 : 编译原理和技术 语法制导的翻译 54 9

10 类型表示中的环 type link = cell ; cell = record info : integer ; next : link end; 引入环的话, 递归定义的类型名可以替换掉 info cell = record, : : integer next pointer cell 张昱 : 编译原理和技术 语法制导的翻译 55 类型表示中的环 typedef struct cell { int info; struct cell *next; cell; cell = record, : : info int next pointer 张昱 : 编译原理和技术 语法制导的翻译 56 类型表示中的环 C 语言对除记录 ( 结构体 ) 共用体以外的所有类型使用结构等价, 而对记录类型用的是名字等价, 以避免类型图中的环 info cell = record, : : int next pointer cell 张昱 : 编译原理和技术 语法制导的翻译 57 例题 4 在 X86/Linux 机器上, 编译器报告最后一行有错误 : incompatible types in return typedef int A1[10]; A2 *fun1( ) { typedef int A2[10]; return(&a); A1 a; typedef struct {int i;s1; S2 fun2( ) { typedef struct {int i;s2; return(s); S1 s; 在 C 语言中, 数组和结构体都是构造类型, 为什么上面 第 2 个函数有类型错误, 而第 1 个函数却没有? 张昱 : 编译原理和技术 语法制导的翻译 58 多态函数的引出 5.5 多态函数 参数化多态 类型系统的定义 类型检查 例如何编写求表长的通用程序? typedef struct { int info; link next; cell, *link; unknown type name link 张昱 : 编译原理和技术 语法制导的翻译 60 10

11 多态函数的引出 例如何编写求表长的通用程序? typedef struct cell{ int length(link lptr) { int info; int len = 0; link p = lptr; struct cell *next; while (list!= NULL) { cell, *link; len++; 计算过程与表元的数 p = p->next; 据类型无关, 但语言的类 型系统使该函数不能通用 return len; 张昱 : 编译原理和技术 语法制导的翻译 61 多态函数的引出 例如何编写求表长的通用程序? 用 ML 语言很容易写出求表长的程序而不必管表元的类型 fun length (lptr) = if null (lptr) then 0 else length (tl (lptr)) + 1; tl- 返回表尾 null- 测试表是否为空 length ( [ sun, mon, tue ] ) length ( [10, 9, 8 ] ) 都等于 3 张昱 : 编译原理和技术 语法制导的翻译 62 参数化多态 多态函数 (polymorphic functions) 参数化多态 允许函数参数的类型有多种不同的情况 函数体中语句的执行能适应参数为不同类型的情况 多态算符 (polymorphic operators) Ad-hoc 多态 例如 : 数组索引 函数应用 通过指针间接访问相应操作的代码段接受不同类型的数组 函数等 C 语言手册中关于取地址算符 & 的论述是 : 如果运算对象的类型是, 那么结果类型是指向 的指针 张昱 : 编译原理和技术 语法制导的翻译 63 类型变量及其应用 类型变量 length 的类型可以写成.list( ) integer 类型变量的引入便于讨论未知类型如, 在不要求标识符的声明先于使用的语言中, 可以通过使用类型变量来确定程序变量的类型 function deref (p); -- 对 p 的类型一无所知 : begin return p -- = pointer ( ) end; deref 的类型是. pointer( ) 张昱 : 编译原理和技术 语法制导的翻译 64 多态函数的类型系统 一个含多态函数的语言 P D; E 这是一个抽象语言, 忽略了函数定义的函数体 D D; D id : Q Q type-variable. Q 多态函数 T T T T T T 笛卡儿积类型 unary-constructor ( T ) basic-type type-variable 引入类型变量 ( T ) E E (E ) E, E id 张昱 : 编译原理和技术 语法制导的翻译 65 多态函数的类型系统 一个含多态函数的语言 P D; E D D; D id : Q Q type-variable. Q T T T T T T unary-constructor ( T ) basic-type type-variable ( T ) E E (E ) E, E id 一个程序 : deref :. pointer( ) ; q : pointer (pointer (integer)); deref (deref (q)) 张昱 : 编译原理和技术 语法制导的翻译 66 11

12 多态函数的类型系统 类型系统中增加的推理规则 环境规则 (Env Var) 类型变量 加到定型环境中, dom ( ), 多态函数的类型系统 类型系统中增加的推理规则 语法规则 (Type Parenthesis) T (T ) 语法规则 (Type Var) (Type Product) 1,, 2 1,, 2 T 1, T 2 T 1 T 2 张昱 : 编译原理和技术 语法制导的翻译 67 (Type Forall), T.T (Type Fresh) 类型变量换名 ( i 不在 中 ).T,, i, i [ i / ] T 张昱 : 编译原理和技术 语法制导的翻译 68 多态函数的类型系统 定型规则 (Exp Pair) E 1 : T 1, E 2 : T 2 E 1, E 2 : T 1 T 2 (Exp FunCall) E 1 : T 1 T 2, E 2 : T 3 E 1 (E 2 ) : S(T 2 ) ( 其中 S 是 T 1 和 T 3 的最一般的合一代换 ) 代换 : 类型表达式中的类型变量用其所代表的类型表达式去替换 subst(t:type_exp, Sv: type_var type_exp):type_exp 实例 : 把 subst 函数用于 t 后所得的类型表达式是 t 的一个实例, 用 S (t) 表示 张昱 : 编译原理和技术 语法制导的翻译 69 代换和实例 function subst (t : type_exp, Sv: type_var type_exp ) : type_exp; begin if t 是基本类型 then return t else if t 是类型变量 then return Sv(t) else if t 是 t 1 t 2 then return subst(t 1, Sv) subst(t 2, Sv) end 例子 (s < t 表示 s 是 t 的实例, 是类型变量 ) pointer( integer )<pointer( ) pointer( real )<pointer( ) integer integer < pointer( )< < 张昱 : 编译原理和技术 语法制导的翻译 70 不合法的实例 例下面左边的类型表达式不是右边的实例 integer real 代换不能用于基本类型 integer real 的代换不一致 integer 的所有出现都应该代换 合一 合一 (unify) 如果存在某个代换 Sv 使得 S(t 1 ) = S(t 2 ), 那么这两个表达式 t 1 和 t 2 能够合一 最一般的合一代换 (the most general unifier) S S(t 1 ) = S(t 2 ); 对任何其它满足 S (t 1 ) = S (t 2 ) 的代换 Sv, 代换 S (t 1 ) 是 S(t 1 ) 的实例 张昱 : 编译原理和技术 语法制导的翻译 71 张昱 : 编译原理和技术 语法制导的翻译 72 12

13 多态函数的类型检查 多态函数和普通函数在类型检查上的区别 (1) 同一多态函数的不同出现不要求变元 / 参数有相同类型 (2) 必须把类型相同的概念推广到类型合一 (3) 要记录类型表达式合一的结果 apply: o deref o :pointer( o ) o apply : i deref i : pointer( i ) i q: pointer(pointer(integer)) deref(deref (q )) 的带标记的语法树 张昱 : 编译原理和技术 语法制导的翻译 73 检查多态函数的翻译方案 E E 1 (E 2 ) { p = mkleaf (newtypevar); // 返回类型 unify (E 1. type, mknode (, E 2.type, p) ); E. type = p E E 1, E 2 {E. type = mknode (, E 1.type, E 2.type) E id {E. type = fresh (lookup(id.entry)) // 类型变量 张昱 : 编译原理和技术 语法制导的翻译 74 例 : 多态函数的检查 apply: o deref o :pointer( o ) o deref i : pointer( i ) i 表达式 : 类型 q : pointer(pointer(integer)) deref i : pointer( i ) i deref i (q) : pointer(integer) deref o : pointer( o ) o deref o (deref i (q)) : integer apply : i q: pointer(pointer(integer)) 代换 i = pointer(integer) o = integer 张昱 : 编译原理和技术 语法制导的翻译 75 求表长的函数的检查 length : ; lptr : ; fun length (lptr) = if null (lptr) then 0 if :. boolean ; else length (tl (lptr)) + 1; null :. list ( ) boolean ; tl :. list ( ) list ( ) ; 类型声明部分 0:integer ;1:integer ; +:integer integer integer ; match :. ; match ( -- 表达式, 匹配 length 函数的 length (lptr), -- 函数首部和函数体的类型 if (null (lptr), 0, length (tl(lptr)) +1) ) 张昱 : 编译原理和技术 语法制导的翻译 76 求表长的函数的检查 行 定型断言 代换 规 则 (1) lptr : (Exp Id) (2) length : (Exp Id) (3) length(lptr) : = (Exp FunCall) (4) lptr : 从 (1) 可得 (5) null : list( n ) boolean (Exp Id) 和 (Type Fresh) (6) null(lptr) : boolean = list ( n ) (Exp FunCall) (7) 0 : integer (Exp Num) (8) lptr : list( n ) 从 (1) 可得 张昱 : 编译原理和技术 语法制导的翻译 77 求表长的函数的检查 行 定型断言 代换 规 则 (9) tl : list( t ) list( t ) (Exp Id) 和 (Type Fresh) (10) tl(lptr) : list( n ) t = n (Exp FunCall) (11) length : list( n ) 从 (2) 可得 (12) length(tl(lptr)) : (Exp FunCall) (13) 1 : integer (Exp Num) (14) + : integer integer integer (Exp Id) 张昱 : 编译原理和技术 语法制导的翻译 78 13

14 求表长的函数的检查 行 定型断言 代换 规 则 (15) length (tl(lptr)) +1 : integer = integer (Exp FunCall) (16) if : boolean i i i (Exp Id) 和 (Type Fresh) (17) if (... ) : integer i = integer (Exp FunCall) (18) match : m m (Exp Id) 和 (Type Fresh) m (19) match ( ) : integer m =integer (Exp FunCall) length 函数的类型是. list( ) integer 5.6 函数和算符重载 Ad-hoc 多态 可能的类型集合及其缩小 附加 : 子类型关系引起的协变和逆变 张昱 : 编译原理和技术 语法制导的翻译 79 重载 重载符号 有多个含义, 但在每个引用点的含义都是唯一的 例如 : 加法算符 + 可用于不同类型, + 是多个函数的名字, 而不是一个多态函数的名字 在 Ada 中,( ) 是重载的,A( I ) 有不同含义 重载的消除 在重载符号的引用点, 其含义能确定到唯一 张昱 : 编译原理和技术 语法制导的翻译 81 表达式的可能类型集合 例 Ada 语言声明 : function (i, j : integer ) return complex; function (x, y : complex ) return complex; 使得算符 重载, 可能的类型包括 : integer integer integer -- 这是预定义的类型 integer integer complex complex complex complex E:{i 3: {i (3 5) z(z:complex) E:{i, c E:{i : 5: {i {i i i, i i c, c c c 张昱 : 编译原理和技术 语法制导的翻译 82 重载函数的应用 缩小可能类型的集合 E E E. unique =ife. types == { t then t else type_error E id E. types = lookup(id. entry) E E 1 (E 2 ) E. types = {s E 2. types 中存在一个 s, 使得 s s 属于 E 1. types t = E. unique S = {s s E 2. types and s t E 1.types E 2. unique = if S == { s thens else type_error E 1. unique = if S == { s then s t else type_error 张昱 : 编译原理和技术 语法制导的翻译 83 附加 : 子类型 - 协变和逆变 子类型关系 < 类型上的偏序关系 满足包含原理 : 如果 s 是 t 的子类型, 则需要类型为 t 的值时, 都可以将类型为 s 的值提供给它 协变 (covariant)t<t', 则 c(t)<c(t') 函数类型在值域上是协变的假设 e:,e1:, 则 e(e1):. 如果 < ', 则 e(e1): '. 逆变 (contravariant)t<t', 则 c(t')<c(t) 函数类型在定义域上是逆变的假设 e:,e1: ', 如果 '<, 则 e(e1):. 张昱 : 编译原理和技术 语法制导的翻译 84 14

15 例题 5 编译器和连接装配器未能发现下面的调用错误 long gcd (p, q) long p, q;{/* 这是参数声明的传统形式 */ /* 参数声明的现代形式是 long gcd ( long p, long q) { */ if (p%q == 0) return q; else return gcd (q, p%q); main() { printf( %ld,%ld\n, gcd(5), gcd(5,10,20)); 张昱 : 编译原理和技术 语法制导的翻译 85 15

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

ebook14-4

ebook14-4 4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

大侠素材铺

大侠素材铺 编译原理与技术 词法分析 Ⅱ 计算机科学与技术学院李诚 13/09/2018 主要内容 记号 (token) 源程序 词法分析器 getnexttoken 语法分析器 符号表 词法分析器的自动生成 正则表达式 NFA DFA 化简的 DFA 词法分析器的生成器 Lex: flex jflex Fst lexicl nlyzer genertor 2/51 Regulr Expr to NFA 正则表达式

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Microsoft PowerPoint - L12-v3.pptx

Microsoft PowerPoint - L12-v3.pptx Lecture 12: 中间代码生成 -II Xiaoyuan Xie 谢晓园 xxie@whu.edu.cn 计算机学院 E301 控制流翻译 控制流语句的翻译 文法 B表示布尔表达式 S代表语句 S if (B) S1 S if (B) S1 else S2 S while (B) S1 代码的布局见右图 继承属性 B.true B为真的跳转目标 B.false B为假的跳转目标 S.next

More information

PowerPoint Presentation

PowerPoint Presentation Typed Lambda Caculus,+, 程序设计语言理论 张昱 0551-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 References PFPL Chapters: 4 Statics, 5 Dynamics, 6 Type Safety, 7 Evaluation Dynamics Chapters: 10 Product Types,

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

大侠素材铺

大侠素材铺 编译原理与技术 语法制导翻译 Ⅱ 计算机科学与技术学院 李诚 22/10/2018 Announcement Tutorial on Thursday (25/10/2018) 3B201, Class time Assignment review Q & A Cheng @ Compiler Fall 2018, USTC 2 主要内容 源程序 词法分析器 token 语法分析器 分析树 语义分析

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

C/C++语言 - 分支结构

C/C++语言 - 分支结构 C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2 VHDL (Statements) VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2 (Assignment Statement) (Signal Assignment Statement) (Variable Assignment

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

四川省普通高等学校

四川省普通高等学校 四 川 省 普 通 高 等 学 校 计 算 机 应 用 知 识 和 能 力 等 级 考 试 考 试 大 纲 (2013 年 试 行 版 ) 四 川 省 教 育 厅 计 算 机 等 级 考 试 中 心 2013 年 1 月 目 录 一 级 考 试 大 纲 1 二 级 考 试 大 纲 6 程 序 设 计 公 共 基 础 知 识 6 BASIC 语 言 程 序 设 计 (Visual Basic) 9

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

C

C C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

科学计算的语言-FORTRAN95

科学计算的语言-FORTRAN95 科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

Microsoft PowerPoint - ch4.ppt [兼容模式]

Microsoft PowerPoint - ch4.ppt [兼容模式] 第四章 语法制导的翻译 本章内容 1 介绍语义描述的一种形式方法: 语法制导的翻译 (syntax-directed translation), 它包括两种具体形式 语法制导的定义 (syntax-directed definition) E E 1 + T E.code = E 1.code T.code + 可读性好, 更适于描述规范 翻译方案 (translation scheme) E E

More information

编译原理与技术

编译原理与技术 编译原理与技术 中间代码生成 2015/11/7 编译原理与技术 讲义 1 中间代码生成 - 布尔表达式翻译 - 控制流语句翻译 2015/11/7 编译原理与技术 讲义 2 布尔表达式的翻译 布尔表达式文法 G 4 E E 1 or E 2 E 1 and E 2 not E 1 ( E 1 ) id 1 relop id 2 true false id 3 布尔运算符 or and 和 not(

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

数学分析(I)短课程 [Part 2] 4mm 自然数、整数和有理数

数学分析(I)短课程 [Part 2]   4mm 自然数、整数和有理数 .. 数学分析 (I) 短课程 [Part 2] 自然数 整数和有理数 孙伟 华东师范大学数学系算子代数中心 Week 2 to 18. Fall 2014 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014 1 / 78 3. 自然数理论初步 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014

More information

Microsoft PowerPoint - plan06.ppt

Microsoft PowerPoint - plan06.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 6. 基 本 控 制 抽 象 子 程 序 抽 象 子 程 序 活 动 和 局 部 环 境 静 态 实 现 模 型 一 般 实 现 模 型 调 用 序 列 和 在 线 展 开 参 数 机 制 泛 型 子 程 序 异 常 处 理 其

More information

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

More information

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

untitled

untitled 說 參 例 邏 邏 1. 說 2. 數 數 3. 8 4. 理念 李 龍老 立 1. 理 料 2. 理 料 3. 數 料 4. 流 邏 念 5. 良 6. 讀 行 行 7. 行 例 來 邏 1. 說 說 識 量 2. 說 理 類 3. 數 數 念 4. 令 5. 良 6. 流 邏 念 7. 說 邏 理 力 1. 2. 3. 4. 5. 列 念 1 參 1. ( Visual Basic 例 ) (1)

More information

ebook39-5

ebook39-5 5 3 last-in-first-out, LIFO 3-1 L i n e a r L i s t 3-8 C h a i n 3 3. 8. 3 C + + 5.1 [ ] s t a c k t o p b o t t o m 5-1a 5-1a E D 5-1b 5-1b E E 5-1a 5-1b 5-1c E t o p D t o p D C C B B B t o p A b o

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2 Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790

More information

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不 1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int

More information

untitled

untitled 1 5 IBM Intel 1. IBM 第 1/175 页 第 2/175 页 第 3/175 页 80 第 4/175 页 2. IBM 第 5/175 页 3. (1) 第 6/175 页 第 7/175 页 第 8/175 页 = = 第 9/175 页 = = = = = 第 10/175 页 = = = = = = = = 3. (2) 第 11/175 页 第 12/175 页 第 13/175

More information

第一章 人物传

第一章  人物传 433 201 207 202 15 806-820 825-827 434 847 621 1031-1098 5 3 12 17 1047 19 1049 28 1058 40 1078-1085 435 1098 67 1076-1164 1118 1134 1141 185 730 1142 24 1143 1147 1149 1 6 436 1102-1165 1138 10 10 1163

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

RUN_PC連載_8_.doc

RUN_PC連載_8_.doc PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow

More information

Microsoft PowerPoint - ch7.ppt [兼容模式]

Microsoft PowerPoint - ch7.ppt [兼容模式] 第七章 中间代码生成 静态中间代码记号分析检查代码中间生成流器器生成代码器器本章内容 介绍几种常用的中间表示 (intermediate representation): 后缀表示 图形表示和三地址代码 用语法制导定义和翻译方案来说明源语言的各种 用语法制导定义和翻译方案来说明源语言的各种构造怎样被翻译成中间形式 7.1.1 后缀表示 7.1 中间语言 E E ope uope (E) id num

More information

修改图 7.5 中计算声明名字的类型和相对地址的翻译方案, 允许名字表而不是单个名字出现在形式为 D id : T 的声明中 即允许 a, b, c : integer 这种形式的变量声明 下面是一个 C 语言程序 : long f1( i

修改图 7.5 中计算声明名字的类型和相对地址的翻译方案, 允许名字表而不是单个名字出现在形式为 D id : T 的声明中 即允许 a, b, c : integer 这种形式的变量声明 下面是一个 C 语言程序 : long f1( i 2013.12.8 7.4 修改图 7.5 中计算声明名字的类型和相对地址的翻译方案, 允许名字表而不是单个名字出现在形式为 D id : T 的声明中 即允许 a, b, c : integer 这种形式的变量声明 2013.12.1 6.12 下面是一个 C 语言程序 : long f1( i ) long i; { return(i 10); long f2(long i) { return(i

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

第三节 软件测试的过程与策略

第三节 软件测试的过程与策略 ...1...4...9...17...25...29...34...40...46...55...65...73 1 2 3 4 5 6 7 8 9 10 11 1 12 13 1 ABCD 2 A B C D 3 ABCD 4 A1/2 B1/3 C1/4 D2/3 5 % A20 B30 C40 D50 6 A B C D 7 A B C D / 8 A B C D 9 A B C D 10

More information

PowerPoint Presentation

PowerPoint Presentation 引论 编译原理和技术 张昱 0551-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 主要内容 1 2 编程语言及设计 编译器及形式 3 编译器的阶段 4 示例 : 程序的表示 5 基础实验的考虑 张昱 : 编译原理和技术 引论 2 主要内容 1 2 编程语言及设计 编译器及形式 3 编译器的阶段 4 示例 : 程序的表示 5 基础实验的考虑 张昱 :

More information

什么是函数式编程?

什么是函数式编程? 函数式编程 FUNCTIONAL PROGRAMMING byvoid@byvoid.com 什么是函数式编程? 真相是 从停机问题开始 Bug 假设有停机判定算法 function halting(func, input) { } return if_func_will_halt_on_input; 充分利用停机判定 function ni_ma(func) { if (halting(func,

More information

概述

概述 OPC Version 1.8 build 0925 KOCRDK Knight OPC Client Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOC_Init...5 2.2.2 KOC_Uninit...5 2.3...5

More information

(京)新登字063号

(京)新登字063号 教 育 部 职 业 教 育 与 成 人 教 育 司 推 荐 教 材 Java 程 序 设 计 教 程 ( 第 二 版 ) 沈 大 林 主 编 沈 昕 肖 柠 朴 曾 昊 等 编 著 内 容 简 介 Java 是 由 美 国 SUN 公 司 开 发 的 一 种 功 能 强 大 的, 具 有 简 单 面 向 对 象 分 布 式 可 移 植 等 性 能 的 多 线 程 动 态 计 算 机 编 程 语 言

More information

26 头 孢 他 啶 注 射 剂 27 头 孢 他 美 酯 口 服 常 释 剂 型 28 头 孢 吡 肟 注 射 剂 29 头 孢 硫 脒 注 射 剂 30 头 孢 唑 肟 注 射 剂 31 头 孢 替 安 注 射 剂 32 头 孢 哌 酮 注 射 剂 33 头 孢 哌 酮 舒 巴 坦 注 射 剂

26 头 孢 他 啶 注 射 剂 27 头 孢 他 美 酯 口 服 常 释 剂 型 28 头 孢 吡 肟 注 射 剂 29 头 孢 硫 脒 注 射 剂 30 头 孢 唑 肟 注 射 剂 31 头 孢 替 安 注 射 剂 32 头 孢 哌 酮 注 射 剂 33 头 孢 哌 酮 舒 巴 坦 注 射 剂 江 西 省 新 农 合 基 本 用 药 目 录 第 一 部 分 西 药 部 分 序 号 药 品 名 称 剂 型 备 注 一 抗 微 生 物 1. 抗 生 素 类 1 青 霉 素 注 射 剂 2 普 鲁 卡 因 青 毒 素 注 射 剂 3 苯 唑 西 林 注 射 剂 4 氨 苄 西 林 口 服 常 释 剂 型 注 射 剂 5 氨 苄 西 林 丙 磺 舒 口 服 常 释 剂 型 6 青 霉 素 V 口

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

More information

PowerPoint Presentation

PowerPoint Presentation Visual Basic 2005 學 習 範 本 第 7 章 陣 列 的 活 用 7-1 陣 列 當 我 們 需 要 處 理 資 料 時, 都 使 用 變 數 來 存 放 資 料 因 為 一 個 變 數 只 能 代 表 一 個 資 料, 若 需 要 處 理 100 位 同 學 的 成 績 時, 便 要 使 用 100 個 不 同 的 變 數 名 稱, 這 不 但 會 增 加 變 數 名 稱 命 名

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

416 Journal of Software 4(3) 2003,1. Java, Java, Java : ; ; ;Java : TP311 : A (binding time analysis ), (partial evaluation)., [1~3]., C Java, Java.,.

416 Journal of Software 4(3) 2003,1. Java, Java, Java : ; ; ;Java : TP311 : A (binding time analysis ), (partial evaluation)., [1~3]., C Java, Java.,. 1000-9825/2003/14(03)0415 2003 Journal of Software Vol.14, No.3 +,, (, 100022) A Technology of Binding Time Analysis for Object-Oriented Programming Languages LIAO Hu-Sheng +, TONG Zhao-Feng, WANG Zhong

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

第11章 可调内核参数

第11章 可调内核参数 11 11 Unix BSD 4.4 Linux sysctl Unix Linux /proc window /proc /proc/sys /proc/sys sysctl Unix root /proc/sys/vm root /proc/sys sysctl /proc/sys struct ctl_table 18274 struct ctl_tables /proc/sys struct

More information

Microsoft Word - CPE考生使用手冊160524.docx

Microsoft Word - CPE考生使用手冊160524.docx 大 學 程 式 能 力 檢 定 (CPE) 考 生 使 用 手 冊 2016 年 5 月 24 日 這 份 手 冊 提 供 給 參 加 CPE 檢 定 考 試 的 考 生 內 容 包 含 考 試 環 境 的 使 用, 以 及 解 題 時 所 使 用 I/O 的 基 本 知 識 1. 如 欲 報 名 參 加 CPE 考 試, 請 先 於 CPE 網 站 完 成 帳 號 註 冊, 然 後 再 報 名 該

More information

e bug 0 x=0 y=5/x 0 Return 4 2

e bug 0 x=0 y=5/x 0 Return 4 2 e 1 4 1 4 4.1 4.2 4.3 4.4 4.5 e 2 4.1 bug 0 x=0 y=5/x 0 Return 4 2 e 3 4 3 e 4 (true) (false) 4 4 e 5 4 5 4.2 1 G= V E V={n1,n2,,n m } E={e1,e2,,e p } e k ={n i,n j }, n i,n j V e 6 4.2 4 6 1 e 3 n 1 e

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

.size main,.lfe1-main.local b.comm b,4,4.comm c,4,4.ident "GCC: (GNU) egcs /Linux (egcs release)" 修改图 6.5 中计算声明名字

.size main,.lfe1-main.local b.comm b,4,4.comm c,4,4.ident GCC: (GNU) egcs /Linux (egcs release) 修改图 6.5 中计算声明名字 实验 : 1 阅读并理解 PL/0 语言前端编译器中的词法分析器, 扩展 PL/0 语言及其编译器, 以增加对上述多行注释的支持 2 [11 月 8 日开始检查 ] 参考 flex-examples, 将 PL/0 编译器中的词法分析部分的实现改造成两种构造方式 : 手工构造 ( 即使用原先在 pl0.c 中定义的 getch 和 getsym 函数 ) 用 flex 自动生成词法分析程序 ( 即编写描述

More information

Microsoft PowerPoint - syntaxdirect

Microsoft PowerPoint - syntaxdirect 本章内容 语法制导的翻译 编译原理和技术 张昱 055-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 语义描述的一种形式方法 语法制导的定义 (syntax-directed definition) + E.code = E.code.code + 可读性好, 更适于描述规范 翻译方案 (translation scheme) + { pr + 陈述了实现细节

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc TwinCAT 2001.12.11 TwinCAT 1. TwinCAT... 3 2.... 4... 4...11 3. TwinCAT PLC... 13... 13 PLC IEC 61131-3... 14 4. TwinCAT... 17... 17 5. TwinCAT... 18... 18 6.... 19 Maschine.pro... 19... 27 7.... 31...

More information

untitled

untitled 1 1.1 1.2 1.3 1.4 1.5 ++ 1.6 ++ 2 BNF 3 4 5 6 7 8 1.2 9 1.2 IF ELSE 10 1.2 11 1.2 12 1.3 Ada, Modula-2 Simula Smalltalk-80 C++, Objected Pascal(Delphi), Java, C#, VB.NET C++: C OOPL Java: C++ OOPL C# C++

More information

Microsoft PowerPoint - ch6 [Compatibility Mode]

Microsoft PowerPoint - ch6 [Compatibility Mode] 第 6 章 中间代码生成 记号流 分析器 本章内容 静态检查器 中间代码生成器 中间代码 代码生成器 介绍几种常用的中间表示 : 后缀表示 图形表示和三地址代码 用语法制导定义和翻译方案来说明源语言的各种构造怎样被翻译成中间形式 6.1.1 后缀表示表达式 E 的后缀表示可以如下归纳定义 如果 E 是变量或常数, 那么 E 的后缀表示就是 E 本身 如果 E 是形式为 E 1 ope 2 的表达式,

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf(%d, &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf(% 2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3

More information

PowerPoint Presentation

PowerPoint Presentation 第六章中间代码生成 许畅 南京大学计算机系 2018 年春季 本章内容 中间代码表示 表达式的有向无环图 DAG 三地址代码 :x = y op z 类型检查 类型 类型检查 表达式的翻译 中间代码生成 控制流 回填 2 编译器前端的逻辑结构 前端是对源语言进行分析并产生中间表示 处理与源语言相关的细节, 与目标机器无关 前端后端分开的好处 : 不同的源语言 不同的机器可以得到不同的编译器组合 3

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

Ps22Pdf

Ps22Pdf C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

Microsoft PowerPoint - ds-1.ppt [兼容模式]

Microsoft PowerPoint - ds-1.ppt [兼容模式] http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344> 1. 請 問 誰 提 出 積 體 電 路 (IC) 上 可 容 納 的 電 晶 體 數 目, 約 每 隔 24 個 月 (1975 年 更 改 為 18 個 月 ) 便 會 增 加 一 倍, 效 能 也 將 提 升 一 倍, 也 揭 示 了 資 訊 科 技 進 步 的 速 度? (A) 英 特 爾 (Intel) 公 司 創 始 人 戈 登. 摩 爾 (Gordon Moore) (B) 微 軟 (Microsoft)

More information