Microsoft PowerPoint - ir
|
|
- 墀砧 寿
- 5 years ago
- Views:
Transcription
1 中间语言与中间代码生成 张昱 编译原理和技术 中国科学技术大学计算机科学与技术学院 记号流 本章内容 分析器 语法树 静态检查器 语法树 中间中间代码代码生成器 代码生成器 符号表本章内容 中间语言 : 常用的中间表示 (Intermediate Representation) 后缀表示 图表示 三地址代码 LLVM IR 基本块和控制流图 中间代码的生成 声明语句 (=> 更新符号表 ) 表达式 赋值语句 (=> 产生临时变量 查符号表 ) 布尔表达式 控制流语句 (=> 标号 / 回填技术 短路计算 ) 张昱 : 编译原理和技术 中间代码的表示与生成 2 后缀表示 1. 中间语言 后缀形式 图形表示 三地址代码 静态单赋值 LLVM IR 后缀表示不需要括号 (8 5) + 2 的后缀表示是 后缀表示的最大优点是便于计算机处理表达式 计算栈输入串 张昱 : 编译原理和技术 中间代码的表示与生成 4 后缀表示 后缀表示不需要括号 (8 5) + 2 的后缀表示是 后缀表示的最大优点是便于计算机处理表达式 后缀表示的表达能力 可以拓广到表示赋值语句和控制语句 但很难用栈来描述控制语句的计算 图形表示 语法树是一种图形化的中间表示 有向无环图也是一种中间表示 assign a + assign a uminus c d c d uminus c d b b (a) 语法树 (b) DAG a = ( b + c d) + c d 的图形表示 张昱 : 编译原理和技术 中间代码的表示与生成 5 张昱 : 编译原理和技术 中间代码的表示与生成 6 1
2 图形表示 构造赋值语句语法树的语法制导定义 产生式 S id =E 修改构造结点的函数可生成有向无环图 语义规则 S.nptr = mknode( assign, mkleaf (id, id.entry), E.nptr) E E 1 +E 2 E.nptr = mknode( +, E 1.nptr, E 2.nptr) E E 1 E 2 E.nptr = mknode(, E 1.nptr, E 2.nptr) E E 1 E.nptr = mkunode( uminus, E 1.nptr) E (E 1 ) E.nptr = E 1.nptr F id E.nptr = mkleaf (id, id.entry) 张昱 : 编译原理和技术 中间代码的表示与生成 7 三地址代码 三地址代码 (three-address code) 一般形式 :x = y op z 例表达式 x + y z 翻译成的三地址语句序列是 = y z t 2 = x + 张昱 : 编译原理和技术 中间代码的表示与生成 8 三地址代码 三地址代码是语法树或 DAG 的一种线性表示 例 a=( b+c d )+c d 语法树 = b t 2 = c d t 3 = + t 2 t 4 = c d uminus t 5 = t 3 + t 4 a = t 5 三地址代码 三地址代码是语法树或 DAG 的一种线性表示 例 a=( b+c d )+c d 语法树 DAG = b = b t 2 = c d t 2 = c d t 3 = + t 2 t 3 = + t 2 t 4 = c d t 4 = t 3 + t 2 t 5 = t 3 + t 4 a = t 5 a = t 5 uminus b assign a + + c (b) DAG d 张昱 : 编译原理和技术 中间代码的表示与生成 9 张昱 : 编译原理和技术 中间代码的表示与生成 10 三地址代码 常用的三地址语句 赋值语句 x = y op z, x = op y 复写语句 x = y 无条件转移 goto L 条件转移 if x relop y goto L 过程调用 param x 和 call p, n 过程返回 return y 索引赋值 x = y[i] 和 x[i] = y 地址和指针赋值 x = &y,x = y 和 x = y 静态单赋值 静态单赋值形式 (static single-assignment form) 一种便于某些代码优化的中间表示 和三地址代码的主要区别 所有赋值指令都是对不同名字的变量的赋值 三地址代码 静态单赋值形式 p = a +b p 1 = a +b q = p c q 1 = p 1 c p = q d p 2 = q 1 d p = e p p 3 = e p 2 q = p + q q 2 = p 3 + q 1 张昱 : 编译原理和技术 中间代码的表示与生成 11 张昱 : 编译原理和技术 中间代码的表示与生成 12 2
3 静态单赋值 静态单赋值形式 (static single-assignment form) 一种便于某些代码优化的中间表示 和三地址代码的主要区别所有赋值指令都是对不同名字的变量的赋值一个变量在不同路径上都定值的解决办法 if (flag) x = 1; else x = 1; y = x a; 改成 if (flag) x 1 = 1; else x 2 = 1; x 3 = (x 1, x 2 ); // 由 flag 的值决定用 x 1 还是 x 2 张昱 : 编译原理和技术 中间代码的表示与生成 13 LLVM IR 参考资料 LLVM IR 参考手册 ( 教程 ( 举例 :bar(a) foo(a, 4.0) + bar(31337); define %a) { entry: %calltmp = call %a, double e+00) %calltmp1 = call e+04) %addtmp = fadd double %calltmp, %calltmp1 ret double %addtmp } 张昱 : 编译原理和技术 中间代码的表示与生成 基本块和控制流图 基本块 流图 基本块 程序举例 prod = 0; i=1; do { prod = prod + a[i] b[i]; i=i+1; } while (i <= 20); (2) i = 1 (3) =4 i 张昱 : 编译原理和技术 中间代码的表示与生成 16 基本块和流图 基本块的划分 基本块 连续的语句序列, 控制流从它的开始进入, 并从它的末尾离开, 没有停止或分支的可能性 ( 末尾除外 ) 流图 (flow graph) 用有向边表示基本块之间的控制流信息, 基本块作为结点 (2) i = 1 (3) =4 i 划分方法 首先确定所有入口语句 序列的第一个语句 能由 ( 无 ) 条件转移语句转到的语句 紧跟在 ( 无 ) 条件转移语句后面的语句 每个入口语句到下一个入口语句之前 ( 或到程序结束 ) 的语句序列构成一个基本块 (2) i = 1 (3) =4 i 张昱 : 编译原理和技术 中间代码的表示与生成 17 张昱 : 编译原理和技术 中间代码的表示与生成 18 3
4 流图 流图 (2) i = 1 (3) =4 i (2)i=1 (3) =4 i B 1 B 2 张昱 : 编译原理和技术 中间代码的表示与生成 19 (2) i = 1 (3) =4 i (2)i=1 (3) =4 i B 1 B 2 张昱 : 编译原理和技术 中间代码的表示与生成 20 流图 ( 变换成 SSA 格式 ) (2) i 1 = 1 (3) i 3 = (i 1,i 2 ) (4) =4 i 3 (5) t 2 =a[ ] (6) t 3 =4 i 3 (7) t 4 =b[t 3 ] (8) t 5 =t 2 t 4 (9) t 6 =prod+t 5 (10) prod = t 6 (11) t 7 = i 3 +1 (12) i 2 =t 7 (13) if i 2 <= 20 goto (3) (2) i 1 =1 (3) i 3 = (i 1,i 2 ) (4) =4 i 3 (5) t 2 =a[ ] (6) t 3 =4 i 3 (7) t 4 =b[t 3 ] (8) t 5 =t 2 t 4 (9) t 6 =prod+t 5 (10) prod = t 6 (11) t 7 = i 3 +1 (12) i 2 =t 7 (13) if i 2 <= 20 goto (3) B 1 B 2 张昱 : 编译原理和技术 中间代码的表示与生成 中间代码生成概述 方法和关键问题 符号表结构的变化 中间代码生成的方法 边解析边生成中间代码 语法制导的翻译方案 难点 : 理解分析器的运转机制 继承属性的处理 基于树访问的中间代码生成 重点 : 树结构的设计 访问者模式 enter/exit 接口及实现 如实验 2 的任务本节将以基于树访问的中间代码生成方法为主来讲解, 这是现代编译器使用的主流方法 张昱 : 编译原理和技术 中间代码的表示与生成 23 中间代码生成的关键问题 假设采取的中间语言类似三地址代码 类型与符号表的变化 多样化类型 => 整型 ( 字节 字 ) 浮点型 类型符号表 1 个某类型的数据 => m 个字节 (m 为类型对应的字宽 ) 语句的翻译 声明语句 : 不生成指令, 但会更新符号表 ( 作用域, 字宽及存放的相对地址 ) 赋值语句 : 引入临时变量 数组 / 记录元素的地址计算 类型转换 控制流语句 : 跳转目标的确定 ( 引入标号或使用回填技术 ) 短路计算 张昱 : 编译原理和技术 中间代码的表示与生成 24 4
5 符号表的设计 类型检查后的符号表 符号表条目 :( 标识符 存储类别 类型信息 ) 存储类别 :extern, static, register, 类型信息 :( 类别标识, 该类别关联的其他信息 ) 如数组 (Array,(len, elemtype)) 本章符号表的变化 作用域 => 多个符号表 变量 : 字宽 存储的相对地址 ( 以字节为单位 ) 记录类型 : 用符号表管理各个成员的字宽 相对地址 4. 声明语句 分配存储单元, 更新符号表 作用域的管理 记录类型的管理 张昱 : 编译原理和技术 中间代码的表示与生成 25 声明语句的翻译 主要任务 为局部名字分配存储单元符号表条目 : 名字 类型 字宽 偏移 作用域信息的保存 记录类型的管理不产生中间代码指令, 但是要更新符号表 张昱 : 编译原理和技术 中间代码的表示与生成 27 块中无变量声明时的翻译 计算被声明名字的类型和相对地址 P {offset =0} D; S 相对地址初始化为 0 D D ; D D id : T {enter (id.lexeme, T.type, offset); offset = offset + T.width } 更新符号表信息 T integer {T.type = integer; T.width =4} T real {T.type = real; T.width =8} T array [ num ] of T 1 类型 => 字宽 {T.type = array (num.val, T 1.type); T.width = num.val T 1.width} T T 1 {T.type = pointer (T 1.type); T.width =4} 张昱 : 编译原理和技术 中间代码的表示与生成 28 仅有主过程时的翻译 基于树访问生成 enterp 时处理 P {offset =0} D; S D D ; D D id : T {enter (id.lexeme, T.type, offset); offset = offset + T.width } T integer {T.type = integer; T.width =4} T real {T.type = real; T.width =8} T array [ num ] of T 1 {T.type = array (num.val, T 1.type); T.width = num.val T 1.width} visitd 时处理 ( 只有访问 D 时才知道 D 是哪种结构 ) exitd 时处理 exitt 时处理 visitt 时处理 ( 只有访问 T 时才 T T 1 {T.type = pointer (T 1.type); T.width =4} 知道 T 是哪种结构 ) 张昱 : 编译原理和技术 中间代码的表示与生成 29 允许自定义过程时的翻译 所讨论语言的文法 P D; S D D ; D id : T proc id ; D ; S 管理作用域 每个过程内声明的符号要置于该过程的符号表中 方便地找到子过程和父过程对应的符号表 sort var a: ; x: ; readarray var i: ; exchange quicksort var k, v: ; partition var i, j: ; P186, 图 6.14 ( 过程参数被略去 ) 张昱 : 编译原理和技术 中间代码的表示与生成 30 5
6 各过程的符号表 sort readarray exchange quicksort partition readarray 表头 i sort 空表头 a x readarray exchange quicksort exchange 表头 指向 readarray 指向 exchange quicksort 表头 k v partition partition 张昱 : 编译原理和技术 中间代码的表示与生成 31 符号表的组织与管理 相关的数据结构设计 sort 符号表 : 哈希表 var a: ; x: ; readarray 符号表之间的连接 ( 双向链 ) var i: ; 父 子 : 过程中包含哪些子过程定义 : exchange 子 父 : 分析完子过程后继续分析父过程 一遍分析时, 需要维护符号表栈 quicksort var k, v: ; 本章使用的符号表相关的函数 partition mktable(previous) var i, j: ; enter(table, name, type, offset) addwidth(table, width) P186, 图 6.14 enterproc(table, name, newtable) ( 过程参数被略去 ) 张昱 : 编译原理和技术 中间代码的表示与生成 32 声明语句的处理 P D; S tblptr: 符号表栈 D D ; D id : T offset: 偏移量栈 proc id ; D ; S enterp:t = mktable (nil); push(t, tblptr); push (0, offset) visitd: 1) id : T: 更新符号表中 id 对应的条目 enter(top(tblptr), id.lexeme, T.type, top(offset)); top(offset) =top(offset) +T.width 声明语句的处理 P D; S tblptr: 符号表栈 D D ; D id : T offset: 偏移量栈 proc id ; D ; S enterp:t = mktable (nil); push(t, tblptr); push (0, offset) visitd: 1) id : T: 更新符号表中 id 对应的条目 2) proc id ; D; S: 访问 D 前 : 新建该过程的符号表, 进入该过程的作用域 t=mktable(top(tblptr)); push(t,tblptr);push(0, offset) 张昱 : 编译原理和技术 中间代码的表示与生成 33 张昱 : 编译原理和技术 中间代码的表示与生成 34 声明语句的处理 P D; S tblptr: 符号表栈 D D ; D id : T offset: 偏移量栈 proc id ; D ; S enterp:t = mktable (nil); push(t, tblptr); push (0, offset) 如果 S 中存在对该过 visitd: 程的递归调用, 则在分 1) id : T: 更新符号表中 id 对应的条目析 S 前将该过程名插入符号表 2) proc id ; D; S: 访问 D 前 : 新建该过程的符号表, 进入该过程的作用域访问 S 后 : 将该过程符号信息插入到父符号表, 退出作用域 t = top(tblptr); addwidth(t, top(offset) ); pop(tblptr); pop(offset); enterproc(top(tblptr), id.lexeme, t) 张昱 : 编译原理和技术 中间代码的表示与生成 35 声明语句的处理 P D; S tblptr: 符号表栈 D D ; D id : T offset: 偏移量栈 proc id ; D ; S enterp:t = mktable (nil); push(t, tblptr); push (0, offset) visitd: 1) id : T: 更新符号表中 id 对应的条目 2) proc id ; D; S: exitp: addwidth (top (tblptr), top (offset)); pop(tblptr); pop (offset) 张昱 : 编译原理和技术 中间代码的表示与生成 36 6
7 记录的域名管理 关联的文法 T record D 记录类型单独建符号表 ( 类型表达式 ), 域相对地址从 0 开始 visitt: record D 访问 D 之前 : 建立符号表, 进入作用域 t = mktable(nil); push(t, tblptr); push(0, offset) 结尾 : 设置记录的类型表达式和宽度, 退出作用域 T.type = record (top(tblptr) ); T.width = top(offset); pop(tblptr); pop(offset) 张昱 : 编译原理和技术 中间代码的表示与生成 赋值语句 分配临时变量, 存储表达式计算的中间结果 数组元素的地址计算 类型转换 赋值语句的翻译 主要任务 赋值语句的中间代码生成 关联的文法 复杂的表达式 => 多条计算指令组成的序列 S id := E E E 1 + E 2 E 1 (E 1 ) id 分配临时变量保存中间结果 id: 查符号表获得其存储的场所 数组元素 : 元素地址计算 符号表中保存数组的基址和用于地址计算的常量表达式的值 数组元素在中间代码指令中表示为 基址 [ 偏移 ] 可以进行一些语义检查 类型检查 变量未定义 / 重复定义 / 未初始化 类型转换 : 因为目标机器的运算指令是区分类型的 张昱 : 编译原理和技术 中间代码的表示与生成 39 visits: id := E 结尾 : 获取 id 的地址和存放 E 结果的场所, 发射赋值指令 p = lookup(id.lexeme); if p!= nil then emit ( p, =,E.place) else error visite: E E 1 + E 2 结尾 : 发射加法指令 E.place = newtemp(); emit (E.place, =,E 1.place, +,E 2.place) 张昱 : 编译原理和技术 中间代码的表示与生成 40 赋值语句的中间代码生成 关联的文法 S id := E visite: E E 1 + E 2 E 1 (E 1 ) id E E 1 + E 2 结尾 : 发射加法指令 E - E 1 结尾 : 发射负号运算指令 E.place = newtemp(); emit (E.place, =, uminus, E 1.place) E ( E 1 ) 结尾 :E.place = E 1.place; E id 结尾 : 获取 id 的地址并作为 E 的场所 p = lookup(id.lexeme); if p!= nil then E.place = p else error 张昱 : 编译原理和技术 中间代码的表示与生成 41 数组元素的地址计算 一维数组元素的地址计算 A 的第 i 个元素的地址 : base +(i low ) w 变换成 : i w + (base low w) low w 是常量, 编译时计算, 减少运行时计算 二维数组元素的地址计算 列为主序 ( 列优先 )? 行为主序? 行为主序时 :base +((i 1 low 1 ) n 2 +(i 2 low 2 )) w (A[i 1, i 2 ] 的地址, 其中 n 2 = high 2 low 2 +1) 变换成 : ((i 1 n 2 )+i 2 ) w + (base ((low 1 n 2 )+low 2 ) w) 张昱 : 编译原理和技术 中间代码的表示与生成 42 7
8 数组元素的地址计算 多维数组元素的地址计算 以行为主序下标变量 A[i 1, i 2,, i k ] 的地址表达式 (( ((i 1 n 2 + i 2 ) n 3 + i 3 ) ) n k + i k ) w + base (( ((low 1 n 2 + low 2 ) n 3 + low 3 ) ) n k + low k ) w 翻译的主要任务 发射地址计算的指令 基址 [ 偏移 ] 相关的中间指令 :t=b[o],b[o]=t 数组元素的访问处理 关联的文法 S L := E Elist Elist, E E L id [ Elist ] id E L 采用语法制导的翻译方案时存在的问题 Elist Elist, E E 由 Elist 的结构只能得到各维的下标值, 但无法获得数组的信息 ( 如各维的长度 ) 需要改写文法为 :L Elist ] id Elist id [ E Elist, E Elist id [ E 由这个定义可以获得数组的信息, 并从左到右传播下去, 达到边分析边计算的目的 张昱 : 编译原理和技术 中间代码的表示与生成 43 张昱 : 编译原理和技术 中间代码的表示与生成 44 数组元素的访问处理 基于树来生成会简单多了, 关联的文法不用改写文法 S L := E L id [ Elist ] id Elist Elist, E E visitl: L id [ E 1, E 2,, E n ] 访问 E 1 之后 : ndim = 1; place = E 1.place; // 局部变量每次访问 E i 之后计算 : t = newtemp(); ndim ++; emit (t, =,place,, limit(id.place, m)); emit (t, =,t, +,E i.place); place = t; 结尾 : L.place = newtemp(); ndim ++; emit (L.place, =,base(id.place),, invariant (id.place) ); L.offset = newtemp(); emit (L.offset, =,place,, width(id.place)) ); 张昱 : 编译原理和技术 中间代码的表示与生成 45 数组元素的访问处理 关联的文法 S L := E E L visite: E L 结尾 :if(l.offset == null) / 简单变量 / E.place = L.place else { E.place = newtemp(); emit (E.place, =,L.place, [, L.offset, ] ); } visits: S L:=E 结尾 :if(l.offset == null) emit (L.place, =,E.place); else emit (L.place, [, L.offset, ], =, E.place); 张昱 : 编译原理和技术 中间代码的表示与生成 46 例 类型转换 x=y+i j (x 和 y 的类型是 real,i 和 j 的类型是 integer) 中间代码 =iint j t 2 = inttoreal t 3 =yreal+ t 2 x=t 3 目标机器的运算指令是区分整型和浮点型的高级语言中的重载算符 => 中间语言中的多种具体算符 张昱 : 编译原理和技术 中间代码的表示与生成 47 类型转换的处理 以 E E 1 + E 2 为例说明 visite: E E 1 + E 2 结尾 : 判断 E 1 和 E 2 的类型, 看是否要进行类型转换 ; 若需要, 则分配存放转换结果的临时变量并发射类型转换指令 E.place = newtemp(); if (E 1.type == integer && E 2.type == integer ){ emit (E.place, =,E 1.place, int+, E 2.place); E.type = integer; }elseif(e 1.type == integer && E 2.type == real) { u = newtemp(); emit (u, =, inttoreal, E 1.place); emit (E.place, =,u, real+, E 2.place); E.type = real; } 张昱 : 编译原理和技术 中间代码的表示与生成 48 8
9 中间代码生成的主要任务 6. 布尔表达式和控制流语句 布尔表达式 : 短路计算 控制流语句的翻译 : 标号 回填技术 switch 的翻译优化 过程调用的中间代码格式与翻译 主要任务 布尔表达式的计算 : 完全计算 短路计算 控制流语句 分支结构 (if switch) 循环结构 过程 / 函数的调用 各子结构的布局 + 无条件或有条件转移指令 跳转目标的两种处理方法 标号技术 : 新建标号, 跳转到标号 回填技术 : 先构造待回填的指令链表, 待跳转目标确定时再回填链表中各指令缺失的目标信息 张昱 : 编译原理和技术 中间代码的表示与生成 50 布尔表达式 布尔表达式的作用 计算逻辑值 作为控制流语句中的条件 本节关联的布尔表达式文法 B B or B B and B notb (B ) E relop E true false 布尔表达式的计算 完全计算 : 各子表达式都要被计算 短路计算 :B 1 or B 2 定义成 if B 1 then true else B 2 B 1 and B 2 定义成 if B 1 then B 2 else false 张昱 : 编译原理和技术 中间代码的表示与生成 51 控制流语句的翻译 关联的控制流语句 S if B then S 1 if B then S 1 else S 2 while B do S 1 switch E begin case V 1 : S 1 case V n-1 : S n-1 default: S n callid(elist) S 1 ; S 2 Elist Elist, E E 张昱 : 编译原理和技术 中间代码的表示与生成 52 if 语句的中间代码布局 问题与对策 B 的短路计算中, 需要知道其为真或假时的跳转目标 B S 1 S 2 分别会发射多少条指令是不确定的引入标号 : 先确定标号, 在目标确定时发射标号指令可调用 newlabel( ) 产生新标号, 每条语句有 next 标号 B.code (a) if-then 指向 B.true 指向 B.false B.code goto S.next B.false: S 2.code (b) if-then-else 指向 B.true 指向 B.false 张昱 : 编译原理和技术 中间代码的表示与生成 53 while 语句和顺序结构 while 循环语句的中间代码 引入开始标号 S.begin, 作为循环的跳转目标 顺序结构 为每一语句 S 1 引入其后的下一条语句的标号 S 1.next S.begin: 指向 B.true B.code 指向 B.false goto S.begin (c) while-do S 1.next: S 2.code (d) S 1 ; S 2 张昱 : 编译原理和技术 中间代码的表示与生成 54 9
10 if 语句的中间代码生成 问题与对策 B 的短路计算中, 需要知道其为真或假时的跳转目标 B S 1 S 2 分别会发射多少条指令是不确定的引入标号 : 先确定标号, 在目标确定时发射标号指令 可调用 newlabel( ) 产生新标号 visitif-then: B.code 访问 B 前 :B.true = newlabel(); B.false = S.next; // 继承属性进入 S 1 前 :S 1.next = S.next; (a) if-then 访问 S 1 后 :S.code = B.code gen(b.true, : ) S 1.code 指向 B.true 指向 B.false 张昱 : 编译原理和技术 中间代码的表示与生成 55 if 语句的中间代码生成 回填 : 仅使用综合属性 把跳转到同一个标号的指令放到同一张指令表中如, 为 B 引入综合属性 truelist 和 falselist 分别收集要回填的跳转指令, 为 S 引入 nextlist 收集要回填的跳转指令 等目的标号确定时, 再把它填到表中的各条指令中指向 B.true visitif-then:s if B then S 1 B.code 指向 B.false 准备访问 S 1 前 :instr = nextinstr; 访问 S 1 后 : backpatch(b.truelist, instr); // 回填 (a) if-then S.nextlist = merge(b.falselist, S 1.nextlist); 张昱 : 编译原理和技术 中间代码的表示与生成 56 if 语句的中间代码生成 S if B then S 1 else S 2 ( 标号技术 ) 访问 B 前 :B.true = newlabel(); B.false = newlabel(); 进入 S 1 前 :S 1.next = S.next; 进入 S 2 前 :S 2.next = S.next; 访问 S 2 后 :S.code = B.code gen(b.true, : ) S 1.code gen( goto, S.next) gen(b.false, : ) S 2.code 张昱 : 编译原理和技术 中间代码的表示与生成 57 if 语句的中间代码生成 S if B then S 1 else S 2 ( 标号技术 ) 访问 B 前 :B.true = newlabel(); B.false = newlabel(); 进入 S 1 前 :S 1.next = S.next; 进入 S 2 前 :S 2.next = S.next; 访问 S 2 后 :S.code = B.code gen(b.true, : ) gen( goto, S.next) gen(b.false, : ) S 2.code 回填 进入 S 1 前 :instr1 = nextinstr; 访问 S 1 后 :nextlist=makelist(nextinstr); emit( goto_ ); 进入 S 2 前 :instr2 = nextinstr; 访问 S 2 后 :backpatch(b.truelist, instr1); backpatch(b.falselist, instr2); S.nextlist = merge(merge(s 1.nextlist, nextlist), S 2.nextlist); 张昱 : 编译原理和技术 中间代码的表示与生成 58 while 语句的中间代码生成 S while B do S 1 访问 while 前 :S.begin = newlabel(); 访问 B 前 :B.true = newlabel(); B.false = S.next; 进入 S 1 前 :S 1.next = S.begin; S.begin: 指向 B.true B.code 指向 B.false goto S.begin (c) while-do 访问 S 1 后 :S.code = gen(s.begin, : ) B.code gen(b.true, : ) S 1.code gen( goto, S.begin) 张昱 : 编译原理和技术 中间代码的表示与生成 59 while 语句的中间代码生成 S while B do S 1 访问 while 前 :S.begin = newlabel(); S.begin: B.code 访问 B 前 :B.true = newlabel(); B.false = S.next; goto S.begin 进入 S 1 前 :S 1.next = S.begin; (c) while-do 访问 S 1 后 :S.code = gen(s.begin, : ) B.code gen(b.true, : ) gen( goto, S.begin) 回填进入 B 前 :instr1 = nextinstr; 进入 S 1 前 :instr2 = nextinstr; 访问 S 1 后 :backpatch(s 1.nextlist, instr1); backpatch(b.truelist, instr2); S.nextlist = B.falselist; emit( goto, instr1); 指向 B.true 指向 B.false 张昱 : 编译原理和技术 中间代码的表示与生成 60 10
11 布尔表达式的控制流翻译 布尔表达式的翻译 如果 B 是 a < b 的形式, 那么代码是 : if a < b goto B.true goto B.false 例表达式 a < b or c < d and e < f 是 : if a < b goto L true goto L 1 L 1 :if c < d goto L 2 goto L false L 2 :if e < f goto L true goto L false B B 1 or B 2 ( 标号技术 ) 访问 B 1 前 :B 1.true = B.true; B 1.false = newlabel(); 访问 B 2 前 :B 2.true = B.true; B 2.false = B 1.false; 访问 B 2 后 :B.code = B 1.code gen(b 1.false, : ) B 2.code B not B 1 ( 标号技术 ) 访问 not 前 :B 1.true = B.false; B 1.false = B.true; 访问 B 1 后 :B.code = B 1.code 张昱 : 编译原理和技术 中间代码的表示与生成 61 张昱 : 编译原理和技术 中间代码的表示与生成 62 布尔表达式的翻译 B B 1 and B 2 ( 标号技术 ) 访问 B 1 前 :B 1.true = newlabel(); B 1.false = B.false; 访问 B 2 前 :B 2.true = B.true; B 2.false = B.false; 访问 B 2 后 :B.code = B 1.code gen(b 1.true, : ) B 2.code 布尔表达式的翻译 B E 1 relop E 2 ( 标号技术 ) 访问 E 2 后 :B.code = E 1.code E 2.code gen( if, E 1.place, relop.op, E 2.place, goto, B.true) gen( goto, B.false) B (B 1 )( 标号技术 ) 访问 ( 前 :B 1.true = B.true; B 1.false = B.false; 访问 ) 后 :B.code = B 1.code 张昱 : 编译原理和技术 中间代码的表示与生成 63 B true( 标号技术 ) 访问 true 后 :B.code = gen( goto, B.true) B false( 标号技术 ) 访问 false 后 :B.code = gen( goto, B.false) 张昱 : 编译原理和技术 中间代码的表示与生成 64 布尔表达式的翻译 ( 回填 ) 布尔表达式的翻译 ( 回填 ) B B 1 or MB 2 { backpatch(b 1.falselist, M.instr); B.falselist = B 2.falselist; B.truelist = merge(b1.truelist, B2.truelist);} M { M.instr = nextinstr; } B B 1 and MB 2 { backpatch(b 1.truelist, M.instr); B.truelist = B 2.truelist; B.falselist=merge(B 1.falselist, B 2.falselist); } B not B 1 { B.truelist = B 1.falselist; B.falselist = B 1.truelist; } B ( B 1 ) { B.truelist = B 1.truelist; B.falselist = B 1.falselist; } B E 1 relop E 2 { B.truelist = makelist(nextinstr); B.falselist = makelist(nextinstr+1); emit( if, E 1.place, relop.op, E 2.place, goto _ ); emit( goto _ ); } B true { B.truelist = makelist(nextinstr); B.falselist = null; emit( goto _ ); } B false { B.falselist = makelist(nextinstr); B.truelist = null; emit( goto _ ); } 张昱 : 编译原理和技术 中间代码的表示与生成 65 张昱 : 编译原理和技术 中间代码的表示与生成 66 11
12 switch 语句的翻译 switch E begin case V 1 : S 1 case V 2 : S 2 case V n -1 : S n 1 default: S n 分支数较少时 t=e ift!=v 1 goto L 1 S 1 goto next L 1 : ift!=v 2 goto L 2 S 2 goto next L 2 : L n-2 :ift!=v n-1 goto L n-1 S n-1 goto next L n-1 : S n next: 张昱 : 编译原理和技术 中间代码的表示与生成 67 switch 语句的翻译 分支较多时, 将分支测试代码集中在一起, 便于生成较好的 分支测试代码 t=e L n : S n goto test goto next L 1 : S 1 test: if t == V 1 goto L 1 goto next if t == V 2 goto L 2 L 2 : S 2... goto next if t == V n-1 goto L n-1... goto L n L n-1 : S n -1 next: goto next 张昱 : 编译原理和技术 中间代码的表示与生成 68 switch 语句的翻译 过程调用的翻译 中间代码增加一种 case 语句, 便于代码生成器对它进行特别处理 test: case V 1 L 1 case V 2 L 2 case V n-1 L n-1 case t L n next: 代码生成器可做两种优化 : 用二分查找确定该执行的分支 建立入口地址表, 直接找到该执行的分支 ( 例子见第 244 页习题 8.8) 张昱 : 编译原理和技术 中间代码的表示与生成 69 S call id (Elist) Elist Elist, E Elist E 过程调用 id(e 1, E 2,,E n ) 的中间代码结构 E 1.place = E 1 E 2.place = E 2 E n.place = E n param E 1.place param E 2.place param E n.place call id.place, n 张昱 : 编译原理和技术 中间代码的表示与生成 70 过程调用的翻译 例题 1 S call id (Elist) 结尾 : 为长度为 n 的队列中的每个 E.place,emit( param, E.place); emit( call, id.place, n); Elist Elist, E 结尾 : 把 E.place 放入队列末尾 Elist E 结尾 : 将队列初始化, 并让它仅含 E.place Pascal 语言的标准将 for 语句 for v := initial to final do stmt 能否定义成和下面序列有同样的含义? begin := initial; t 2 := final; v:= ; while v <= t 2 do begin stmt; v := succ(v) 张昱 : 编译原理和技术 中间代码的表示与生成 71 张昱 : 编译原理和技术 中间代码的表示与生成 72 12
13 例题 1 Pascal 语言的标准将 for 语句 for v := initial to final do stmt 能否定义成和下面序列有同样的含义? begin := initial; t 2 := final; v:= ; while v <= t 2 do begin stmt; v := succ(v) final 为最大整数时, succ(final) 会导致越界错误 张昱 : 编译原理和技术 中间代码的表示与生成 73 例题 1 Pascal 语言的标准将 for 语句 for v := initial to final do stmt 的中间代码结构如下 : =initial t 2 =final if >t 2 goto L1 v= L2: stmt if v == t 2 goto L1 v=v+1 goto L2 L1: 张昱 : 编译原理和技术 中间代码的表示与生成 74 例题 2 例题 3 C 语言的 for 语句有下列形式 for (e 1 ;e 2 ;e 3 )stmt 它和 e 1 ; while (e 2 )do begin stmt; e 3 ; 有同样的语义 e 1 L1: e 2 L2: e 3 goto L1 stmt goto L2 假转, 由外层语句决定 真转 Pascal 语言 var a,b : array[1..100] of integer; a:=b // 允许数组之间赋值也允许在相同类型的记录之间赋值 C 语言 数组类型不行, 结构体类型可以为这种赋值选用或设计一种三地址语句, 它要便于生成目标代码答 : 仍然用中间代码复写语句 x=y, 在生成目标代码时, 必须根据它们类型的 size, 产生一连串的值传送指令 张昱 : 编译原理和技术 中间代码的表示与生成 75 张昱 : 编译原理和技术 中间代码的表示与生成 76 13
Microsoft PowerPoint - ch7 [Compatibility Mode]
记号流 第七章 分析器 静态检查器 中间代码生成 中间代码生成器 中间代码 代码生成器 本章内容 介绍几种常用的中间表示 (intermediate representation): 后缀表示 图形表示和三地址代码 用语法制导定义和翻译方案来说明源语言的各种构造怎样被翻译成中间形式 7.1.1 后缀表示 E E ope uope (E) id num 表达式 E 的后缀表示可以如下归纳定义 : 表达式
More informationMicrosoft PowerPoint - ch6 [Compatibility Mode]
第 6 章 中间代码生成 记号流 分析器 本章内容 静态检查器 中间代码生成器 中间代码 代码生成器 介绍几种常用的中间表示 : 后缀表示 图形表示和三地址代码 用语法制导定义和翻译方案来说明源语言的各种构造怎样被翻译成中间形式 6.1.1 后缀表示表达式 E 的后缀表示可以如下归纳定义 如果 E 是变量或常数, 那么 E 的后缀表示就是 E 本身 如果 E 是形式为 E 1 ope 2 的表达式,
More informationMicrosoft PowerPoint - ch7.ppt [兼容模式]
第七章 中间代码生成 静态中间代码记号分析检查代码中间生成流器器生成代码器器本章内容 介绍几种常用的中间表示 (intermediate representation): 后缀表示 图形表示和三地址代码 用语法制导定义和翻译方案来说明源语言的各种 用语法制导定义和翻译方案来说明源语言的各种构造怎样被翻译成中间形式 7.1.1 后缀表示 7.1 中间语言 E E ope uope (E) id num
More information词 法 分 析
中间语言与中间代码生成 编译原理和技术 张昱 0551-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 本章内容 记号流 分析器 语法树 静态检查器 语法树 中间代码生成器 中间代码 代码生成器 本章内容 中间语言 : 常用的中间表示 (Intermediate Representation) 后缀表示 图表示 三地址代码 LLVM IR 基本块和控制流图
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编译原理 Compiler Principles 第六章中间代码生成 湖南大学信息科学与工程学院 软件工程系杨金民 2018
编译原理 Compiler Principles 第六章中间代码生成 湖南大学信息科学与工程学院 软件工程系杨金民 2018 什么叫语法制导的翻译 求表达式的值 id 1 + id 2 *id 3 4 + 3 * 5 文法 :E E + E E * E id E 5 E 1 + E 4 id 1 E 2 * E 3 id 2 id 3 四者的语义相同 对于计算机执行的指令流 : E 1 = id 1
More information再版前言
第七章中间代码生成 在第一章已经介绍, 编译器的前端把源程序翻译成中间表示, 后端从中间代码产生目标代码, 与目标语言有关的细节尽可能限制在后端 使用独立于机器的中间形式的好处是 : 1. 再目标 (retargeting) 比较容易 把针对新机器的后端加到现成的前端上, 可以得到另一种机器的编译器 2. 独立于机器的代码优化器可用于这种中间表示 第九章将介绍这种代码优化 因此, 虽然可以把源程序直接翻译并生成目标代码,
More informationPowerPoint Presentation
第六章中间代码生成 许畅 南京大学计算机系 2018 年春季 本章内容 中间代码表示 表达式的有向无环图 DAG 三地址代码 :x = y op z 类型检查 类型 类型检查 表达式的翻译 中间代码生成 控制流 回填 2 编译器前端的逻辑结构 前端是对源语言进行分析并产生中间表示 处理与源语言相关的细节, 与目标机器无关 前端后端分开的好处 : 不同的源语言 不同的机器可以得到不同的编译器组合 3
More informationMicrosoft PowerPoint - 6 Intermediate-Code Generation.pptx
第六章中间代码生成 陈林 本章内容 中间代码表示 抽象语法树 三地址代码 中间代码生成 表达式 类型检查 控制流 编译器前端的逻辑结构 静态类型检查和中间代码生成的过程都可以用语法制导的翻译来描述和实现 对于抽象语法树这种中间表示的生成, 第五章已经介绍过 表达式的有向无环图 语法树中, 公共子表达式每出现一次, 就有一个对应的子树 表达式的有向无环图 (Directed Acyclic Graph,DAG)
More informationMicrosoft 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内容提要 1 语法制导翻译语法制导定义 S 属性定义的自下而上计算 L 属性定义的自上而下计算 L 属性定义的自下而上计算 2 中间代码生成中间语言声明语句赋值语句布尔表达式和控制流语句
编译原理 第七章语法制导翻译及中间代码生成 方徽星 扬州大学信息工程学院 (505) fnghuixing@yzueducn 2018 年 6 月 内容提要 1 语法制导翻译语法制导定义 S 属性定义的自下而上计算 L 属性定义的自上而下计算 L 属性定义的自下而上计算 2 中间代码生成中间语言声明语句赋值语句布尔表达式和控制流语句 11 语法制导定义 (Syntx-Directed Definition)
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大侠素材铺
编译原理与技术 词法分析 Ⅱ 计算机科学与技术学院李诚 13/09/2018 主要内容 记号 (token) 源程序 词法分析器 getnexttoken 语法分析器 符号表 词法分析器的自动生成 正则表达式 NFA DFA 化简的 DFA 词法分析器的生成器 Lex: flex jflex Fst lexicl nlyzer genertor 2/51 Regulr Expr to NFA 正则表达式
More informationCC213
: (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 informationMicrosoft 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 informationchap07.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新・解きながら学ぶJava
481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --
More information<4D F736F F D B1E0D2EBD4ADC0EDA3A8B5DA32B0E6A3A9BFB1CEF3B1ED2E646F63>
编译原理 ( 第 2 版 ) 勘误表 2008-8-31 1 第 2 页倒数第 2 行改成 : 分隔单词的空格通常在词法分析时被删去 2 第 3 页图 1.2 改成 : = = id, 1 + id, 1 + id, 2 id, 2 id, 3 60 id, 3 inttofloat (a) (b) 60 图 1.2 语义分析插入了类型转换 3 第 16 页倒数第 9 行开始的那段改成 : 上一节提到,
More informationMicrosoft PowerPoint - syntaxdirect
本章内容 语法制导的翻译 编译原理和技术 张昱 055-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 语义描述的一种形式方法 语法制导的定义 (syntax-directed definition) + E.code = E.code.code + 可读性好, 更适于描述规范 翻译方案 (translation scheme) + { pr + 陈述了实现细节
More informationebook14-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 informationMicrosoft PowerPoint - L9-v3.pptx
Lecture 9: 语法制导的翻译 -I Xiaoyuan Xie 谢晓园 xxie@whu.edu.cn 计算机学院 E301 Introduction 9.1 概述 语义分析在编译程序中的作用 词法分析 目标代码生成 语法分析 中间代码优化 语义分析 分析 中间代码生成 合成 语法和语义的区别 语法 是描述一个合法定义的程序结构的规则 例如 id( ) 语义 说明一个合法定义的程序的含义
More information修改图 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 informationOOP 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没有幻灯片标题
指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,
More information编译技术 Compiler Principles 课程总结 湖南大学信息科学与工程学院软件工程系杨金民 2019/06
编译技术 Compiler Principles 课程总结 湖南大学信息科学与工程学院软件工程系杨金民 2019/06 软件工程技术知识体系 机器学习 / 神经网络 (AI) 不确定性 ( 概率 ) 编译技术 灵活多变, 但有基因 数据库技术 基础技术 联线 : 直观易懂 联系 组合, 摘取分布式系统面向对象编程计算机网络操作系统数据结构 2 灵活多变 : 计算器该如何编程实现? a + b a +
More informationMicrosoft PowerPoint - typecheck
本章内容 类型检查 编译原理和技术 张昱 0551-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 记号流 语法分析器 语法树语法树类型中间代码中间检查器生成器表示 符号表 语义检查中最典型的部分 类型检查 类型系统 类型检查 符号表的作用 多态函数 重载 其他的静态检查 ( 不详细介绍 ) 控制流检查 唯一性检查 关联名字检查 张昱 : 编译原理和技术
More informationC/C++ - 函数
C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh
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 中计算声明名字
实验 : 1 阅读并理解 PL/0 语言前端编译器中的词法分析器, 扩展 PL/0 语言及其编译器, 以增加对上述多行注释的支持 2 [11 月 8 日开始检查 ] 参考 flex-examples, 将 PL/0 编译器中的词法分析部分的实现改造成两种构造方式 : 手工构造 ( 即使用原先在 pl0.c 中定义的 getch 和 getsym 函数 ) 用 flex 自动生成词法分析程序 ( 即编写描述
More informationエスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******
******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);
More informationuntitled
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编译原理原理与技术
编译原理与技术 语法制导翻译 2015/10/12 编译原理与技术 讲义 1 属性文法 语法制导翻译 S- 属性定义 L- 属性定义 语法制导定义与翻译方案 自底向上翻译 S- 属性定义自底向上计算 自底向上计算继承属性 自顶向下翻译 2015/10/12 编译原理与技术 讲义 2 属性文法 属性文法 (Attributed Grammar) 上下文无关文法 + 属性 + 属性计算规则 属性 - 用来描述文法符号的语义特征,
More informationMicrosoft 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 informationOOP 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 informationC++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,
More informatione 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 informationOOP 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 informationOpen topic Bellman-Ford算法与负环
Open topic Bellman-Ford 2018 11 5 171860508@smail.nju.edu.cn 1/15 Contents 1. G s BF 2. BF 3. BF 2/15 BF G Bellman-Ford false 3/15 BF G Bellman-Ford false G c = v 0, v 1,..., v k (v 0 = v k ) k w(v i 1,
More information, 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 informationFY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
More information2006..,1..,2.,.,2..,3..,3 22..,4..,4 :..,5..,5 :..,5..,6..,6..,8..,10 :..,12..,1..,6..,6..,2 1907..,5,:..,1 :..,1 :..,1 :..,2..,2..,3 :..,1 :..,1..,1.
2006 2005..,5..,2 20 20..,2..,3..,3..,3..,3..,3..,5..,5 :..,8 1861 :..,11..,12 2005..,2..,1..,2..,1..,4..,6..,6 :..,10..,4..,4..,5..,1 :..,4..,6..,3..,4 1910..,5 :1930..,1..,4..,2 :..,2..,2..,1 19.., 1..,1..,1..,3..,3
More information2011-论文选集-2.cdr
! "#$# $$ "#$#$$" " $% &%!$ $ "#$$ " ! "!#!$ %" #& # ( #$ ) )& )# )$ ** "& ")! ! "" # $% & &( ( # ) )** )*+ )*$ )) ))" ),+ )," -./ ) ) ) " )++ )+" )%,, !"#" $ ! " #$% & ( & ) % #$% #$% & * #$%#$% #$% (
More informationMicrosoft Word - 第3章.doc
第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义
More informationMicrosoft PowerPoint - ds-1.ppt [兼容模式]
http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有
More informationMicrosoft PowerPoint - ch4.ppt [兼容模式]
第四章语法制导的翻译 本章内容 1 介绍语义描述的一种形式方法 : 语法制导的翻译 (sytax-directed traslatio), 它包括两种具体形式 语法制导的定义 (sytax-directed defiitio) E.code = E 1.code.code 可读性好, 更适于描述规范 翻译方案 (traslatio scheme) { prit } 陈述了实现细节 ( 如语义规则的计算时机
More informationMicrosoft PowerPoint - lec11 [兼容模式]
代码生成 代码生成 代码生成的输入 - 各种中间代码形式 目标代码与目标机器模型 简单的代码生成器 基本块 DAG 图及代码生成 目标代码 绝对地址目标代码 可重定位的目标 - linker/loader 汇编代码 - assembler 目标机器模型 指令形式 op 源, 目的 寻址模式 - 绝对地址 :op M, R R op (M) R - 寄存器 :op R1,R2 R2 op R1 R2
More information帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)
More informationC/C++语言 - 运算符、表达式和语句
C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe
More informationMicrosoft Word - 01.DOC
第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的
More information第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 informationMicrosoft PowerPoint - ch1.ppt [兼容模式]
编译原理和技术 中国科学技术大学计算机科学与技术学院张昱 0551-3603804 yuzhang@ustc.edu.cn 致谢 本系列讲稿是在陈意云教授撰写的 编译原理和技术 讲稿之上完成, 特此感谢陈老师! 课程简介 课程内容 介绍编译器构造的一般原理和基本实现方法 包括的理论知识 : 形式语言和自动机理论 语法制导的定义和属性文法 类型论与类型系统 程序分析原理, 等等 强调形式描述技术和自动生成技术
More information科学计算的语言-FORTRAN95
科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造
More informationMicrosoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]
指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++
More informationStatic Enforcement of Security with Types
例题 1 一个 C 语言程序及其在 X86/Linux 操作系统上的编译结 果如下 根据所生成的汇编程序来解释程序中四个变 量的存储分配 生存期 作用域和置初值方式等方面 的区别 static long aa = 10; short bb = 20; func( ) { } static long cc = 30; short dd = 40; static long aa = 10; func(
More informationPowerPoint Presentation
引论 编译原理和技术 张昱 0551-63603804,yuzhang@ustc.edu.cn 中国科学技术大学计算机科学与技术学院 主要内容 1 2 编程语言及设计 编译器及形式 3 编译器的阶段 4 示例 : 程序的表示 5 基础实验的考虑 张昱 : 编译原理和技术 引论 2 主要内容 1 2 编程语言及设计 编译器及形式 3 编译器的阶段 4 示例 : 程序的表示 5 基础实验的考虑 张昱 :
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 informationC/C++ - 字符输入输出和字符确认
C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,
More informationMicrosoft PowerPoint - 7-Semantic&IR.ppt
7.1 中间表示的概念 第七章 : 语义分析和中间代码生成 2008 年秋 抽象语法树 vs 类似目标代码 是否使用目标机和运行时环境的详细信 息 数据类型的尺寸 ; 寄存器 变量的存储位置 前端 IR 后端 是否使用符号表中的全部信息 作用域 嵌套层次 变量的偏移量 其它用处 : 用于代码分析以产生高效目标代码 用于多目标编译 (retargetable) 中间代码生成 中间代码生成位于词法分析和语法分析之后,
More information无类继承.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 informationuntitled
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 informationSDK 概要 使用 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 informationPowerPoint Presentation
结合开源软件的 编译原理教学实践探索 张昱 中国科学技术大学计算机科学与技术学院 2017 年高等院校计算机系统类课程联合研讨会 2017.8.26 恩施 中科大的编译原理课程 计算机专业分两个级别, 同时间段授课, 学生可以选择 英才班 (30+) 从 2010 级开始 54+40 加大实验强度, 基础实验 + 扩展实验, 占总分 50% 普通班 54+40 基础实验, 实验占总分 20~30%
More information2015年计算机二级(C语言)模拟试题及答案(三)
2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,
More information新版 明解C言語入門編
328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66
More informationMicrosoft PowerPoint - SyntaxDirectedTranslation [Compatibility Mode]
Outline rror Handling Syntax-Directed Translation xtensions of CFG for parsing Precedence declarations rror handling Semantic actions Constructing a parse tree Originated from Prof. Aiken CS 14 Modified
More informationMicrosoft PowerPoint - 5 Syntax-Directed Translation.pptx
第五章语法制导的翻译 陈林 引言 使用上下文无关文法引导语言的翻译 CFG 的非终结符号代表了语言的某个构造 程序设计语言的构造由更小的构造组合而成 一个构造的语义可以由小构造的含义综合而来 比如 : 表达式 x+y 的类型由 x y 的类型和运算符 + 决定 也可以从附近的构造继承而来 比如 : 声明 int x; 中 x 的类型由它左边的类型表达式决定 语法制导定义和语法制导翻译 语法制导定义
More information新版 明解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 informationGenerated 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 informationMicrosoft Word - 《C语言开发入门》课程教学大纲-2.doc
C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java
More informationSSA Form SSA Form Static Single Assignment Form Å ê «ùxr y fâ Ÿx ùxnº fâÿx ³ ø ± Í r ± º g 1) SSA f f v q «un q ø ñ qfâÿx f f v q ø i ²q øfq v ü Ø v i
SSA Form SSA Form Static Single Assignment Form Å ê «ùxr y fâ Ÿx ùxnº fâÿx ³ ø ± Í r ± º g 1) SSA f f v q «un q ø ñ qfâÿx f f v q ø i ²q øfq v ü Ø v i v j, i j, d yÿr ü q 1 v := v i := v := v j := 1
More information( 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 informationCHAPTER 1
CHAPTER 1 1-1 System Development Life Cycle; SDLC SDLC Waterfall Model Shelly 1995 1. Preliminary Investigation 2. System Analysis 3. System Design 4. System Development 5. System Implementation and Evaluation
More informationC/C++语言 - C/C++数据
C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;
More information9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B
25 9 2008 9 M ICROEL ECTRON ICS & COMPU TER Vol. 25 No. 9 September 2008 J ava 1,2, 1,2, 1,2 (1, 330022 ; 2, 330022) :,. Apla - Java,,.. : PAR ;Apla - Java ; ;CMP ; : TP311 : A : 1000-7180 (2008) 09-0018
More information1-5,6
作业讲解 UD 第 6 章问题 12 14 15 18 UD 第 17 章问题 11 13 14 16 18 19 ES 第 24 节练习 4 6 8 UD 第 27 章项目 3 DH 第 2 章练习 1 2 3 4 5 6 7 8 UD 第 6 章问题 12 Let S be the set of nonzero real numbers. Define a new addition on this
More informationPowerPoint Presentation
Visual Basic 2005 學 習 範 本 第 7 章 陣 列 的 活 用 7-1 陣 列 當 我 們 需 要 處 理 資 料 時, 都 使 用 變 數 來 存 放 資 料 因 為 一 個 變 數 只 能 代 表 一 個 資 料, 若 需 要 處 理 100 位 同 學 的 成 績 時, 便 要 使 用 100 個 不 同 的 變 數 名 稱, 這 不 但 會 增 加 變 數 名 稱 命 名
More information1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10
Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1
More informationMicrosoft PowerPoint - 7-Semantic_IR12.ppt [兼容模式]
中间代码生成 第七章 : 语义分析和中间代码生成 赵银亮 词法分析 语法分析 中间代码生成 中间代码的表示形式有多种 : 逆波兰表示三地址码 ( 三元式 四元式 ) 抽象语法树 P- 代码 属性文法是实现中间代码生成的常用手段 2012 本章内容 : 几种中间表示说明语句的翻译简单算术表达式和赋值句到四元式的翻译布尔表达式到四元式的翻译控制语句的翻译数组元素的引用过程调用 7.1 中间表示的概念 抽象语法树
More informationPowerPoint Presentation
数据结构与算法 ( 六 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 6 章树 C 树的定义和基本术语 树的链式存储结构 子结点表 表示方法 静态 左孩子 / 右兄弟 表示法 动态表示法 动态 左孩子 / 右兄弟 表示法 父指针表示法及其在并查集中的应用
More informationOOP 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 information2002 2003 6 4.1% 15 23 8 4.08 3.92 13.08 9.9256.87% 43.13% 2005 5.11 18.1956.84% 3.89 13.8143.16%23 32 60% 2004 1 2 0.5 1 2005 3 6.13 55.964% 2006 201
1958 1 1983 1990 8 1991 6 2001 9 2002 12 2013 10 28 1990 8 2013 10 2012 12 2013 10 28 920,000,0001.00 920 1983 1990 3.11 1991 1996 3.11 13.61 2001 13.6115 9 60% 2003 6 6 40% 84 2002 2003 6 4.1% 15 23 8
More information新・解きながら学ぶC言語
330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180
More informationMicrosoft PowerPoint - 7-Semantic_IR09.ppt
中间代码生成 第七章 : 语义分析和中间代码生成 中间代码生成位于词法分析和语法分析之后, 是代码生成中的一个阶段 ; 中间代码的形式很多, 如逆波兰记号 抽象语法树 三地址码 ( 三元式 四元式 ) P- 代码, 等等 属性文法是用于中间代码生成的常用的方法 赵银亮 本章内容 : 1. 中间表示形式 2. 说明语句的翻译 3. 简单算术表达式和赋值句到四元式的翻译 4. 布尔表达式到四元式的翻译
More information<4D F736F F F696E74202D20B5DA31D5C220D2FDC2DB2E BD6BBB6C15D205BBCE6C8DDC4A3CABD5D>
编译原理与技术 中国科学技术大学 计算机科学与技术学院 张昱 陈意云 0551-3603804, 3607043 yuzhang, yiyun@ustc.edu.cn cn 课程简介 课程内容 介绍编译器构造的一般原理和基本实现方法 包括的理论知识 : 形式语言和自动机理论 语法制导的定义等 课程特点 强调对编译原理和技术的宏观理解, 不把注意力引导到理论和一些枝节算法上 不偏向于任何源语言或目标机器
More information38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民
1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平
More information大侠素材铺
编译原理与技术 导论 计算机科学与技术学院 李诚 03/09/2018 主要内容 课程设置情况 编译器的由来与挑战 编译器的构造 2/45 课程设置 时间 : 每周一 (6,7) 四 (3,4) 地点 :3B201 课程主页 ( 课件 试题等 ): http://staff.ustc.edu.cn/~chengli7/courses/co mpiler18/ 邮件列表 : 我们会自动将大家的邮箱加入
More information! #$ % & ( ) % & ( ) % & ( ) % & ( ) % & ( ) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ################################################### % & % & !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
More information《米开朗琪罗传》
! " # ! """"""""""""""""""" """"""""""""""""" """""""""""""""" $% """"""""""""" &# """"""""""""""" %# """"""""""""""" # """""""""""""""!$% """""""""""""""!&!! # $$$$$$$$$$$$$$$$$$ $$$$$$$$$!"#!%& (! "
More informationMicrosoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc
2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.
More information《计算概论》课程 第十九讲 C 程序设计语言应用
计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout
More information《C语言程序设计》第2版教材习题参考答案
教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =
More informationCC213
: (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 informationebook122-3
3 Verilog Verilog HDL Ve r i l o g 3.1 Verilog HDL ( i d e n t i f i e r ) $ ( C o u n t COUNT _ R 1 _ D 2 R 56 _ 68 F I V E $ / / C o u n t (escaped identifier ) \ ( ) \ 7400 \.*.$ \{******} \ ~Q \O u
More information<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>
1. 請 問 誰 提 出 積 體 電 路 (IC) 上 可 容 納 的 電 晶 體 數 目, 約 每 隔 24 個 月 (1975 年 更 改 為 18 個 月 ) 便 會 增 加 一 倍, 效 能 也 將 提 升 一 倍, 也 揭 示 了 資 訊 科 技 進 步 的 速 度? (A) 英 特 爾 (Intel) 公 司 創 始 人 戈 登. 摩 爾 (Gordon Moore) (B) 微 軟 (Microsoft)
More information,,!!!?,?,!,,,,,,,,,,!,,, : 1 ,,,,!, :, :,?,,,, 2 ( 1 ) 7 0 ( 11 ) ( 12 ) ( 13 ) ( 14 ) ( 15 ) ( 17 ) ( 18 ) ( 19 ) ( 21 ) ( 22 ) ( 23 ) ( 25 ) ( 26 ) ( 27 ) ( 29 ) ( 30 ) ( 31 ) ( 32 ) ( 33 ) ( 34 ) (
More information《C语言程序设计》教材习题参考答案
教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,
More informationC/C++ - 文件IO
C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;
More information新・明解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 informationVHDL(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 informationFun 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