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

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

Static Enforcement of Security with Types

大侠素材铺

CC213

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

大侠素材铺

C/C++ - 函数

chap07.key

C 1

大侠素材铺

Microsoft PowerPoint - syntaxdirect

C/C++ - 文件IO

Microsoft PowerPoint - RuntimeEnvII [Compatibility Mode]

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

编译原理原理与技术

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

C/C++程序设计 - 字符串与格式化输入/输出

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

新・解きながら学ぶC言語

新版 明解C言語入門編

untitled

《C语言程序设计》第2版教材习题参考答案

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

C++ 程式設計

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

C/C++语言 - C/C++数据

ARM中C和汇编混合编程及示例.doc

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

《C语言程序设计》教材习题参考答案

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C

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

untitled

gcc 对整型和浮点型参数传递的汇编码生成特点分析 张昱 1. 相关资料 关于浮点数 (Floating-point) 的存储表示 : 浮点数的存储目前广泛采用 IEEE 754 标准 (1980 年 Intel 提出, 1985 年被 IEEE 采纳,

ebook14-4

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

02

c_cpp

nooog

C C

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

ebook8-30

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

内容提要 1 语法制导翻译语法制导定义 S 属性定义的自下而上计算 L 属性定义的自上而下计算 L 属性定义的自下而上计算 2 中间代码生成中间语言声明语句赋值语句布尔表达式和控制流语句

编译原理与技术

Microsoft PowerPoint - ch7 [Compatibility Mode]

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

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

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

Microsoft PowerPoint - L9-v3.pptx

Microsoft PowerPoint - ch6 [Compatibility Mode]

untitled

untitled

FY.DOC

华恒家庭网关方案

Linux kernel exploit研究和探索

C/C++ - 字符串与字符串函数

再版前言

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

プログラムの設計と実現II

untitled

C

新・解きながら学ぶJava

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

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

C/C++语言 - 运算符、表达式和语句

新版 明解C++入門編

untitled

Microsoft PowerPoint - typecheck

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

Book1

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

《晚年周恩来》目录

保母人員丙級應檢資料第二部份 doc

编译原理与技术

64 [ 46 ] (p297) 1924 :? [ 47 ] (p570) ; ; ; ; ; ; ; ; ; ; ; [ 11 ]; [ 35 ] [ 49 ] [ 32 ] ( ) [ 48 ] (p 425) [ 50 ] (p 670 6

工 序 的 是 ( ) A. 卷 筒 切 筒 装 药 造 粒 B. 搬 运 造 粒 切 引 装 药 C. 造 粒 切 引 包 装 检 验 D. 切 引 包 装 检 验 运 输 7. 甲 公 司 将 其 实 施 工 项 目 发 包 给 乙 公 司, 乙 公 司 将 其 中 部 分 业 务 分 包 给

Ps22Pdf


Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

幻灯片 1


2


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

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++;

extend

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

没有幻灯片标题

Microsoft Word 年9月二级C真卷.doc

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

提问袁小兵:

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生


3.1 num = 3 ch = 'C' 2

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

Microsoft PowerPoint - string_kruse [兼容模式]

《计算概论》课程 第十九讲 C 程序设计语言应用

Transcription:

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 10); printf( f1 = %d, f2 = %d\n, f1(10.0), f2(10.0) ); 其中函数 f1 和 f2 仅形式参数的描述方式不一样 该程序在 x86/linux 机器上的运行结果如下 : f1 = 0, f2 = 100 请解释为什么用同样的实在参数调用这两个函数的结果不一样 6.14 一个 C 文件 array.c 仅有下面两行代码 : char a[ ][4] = { 123, 456 ; char p[ ] = { 123, 456 ; 从编译生成的下列汇编代码可以看出对数组 a 和指针 p 的存储分配是不同的 试依据这里的存储分配, 为置 了初值后的数组 a 和指针 p 写出类型表达式.file array.c.globl a.data.type a, @object.size a, 8 a:.string 123.string 456.section.rodata.LC0:.string 123.LC1:.string 456.globl p.data.align 4.type p, @object.size p, 8 p:.long.lc0.long.lc1.section.note.gnu-stack,, @progbits.ident GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13) 6.16 一个 C 语言的函数

func(c,l) char c;long l; { func(c,l); 在 x86/linux 机器上编译生成的汇编代码如下 :.file "parameter.c".version "01.01" gcc2_compiled.:.text.align 4.globl func.type func,@function func: pushl %ebp // 将老的基地址指针压栈 movl %esp,%ebp // 将当前栈顶指针作为基地址指针 subl $4,%esp // 分配空间 movl 8(%ebp),%eax movb %al,-1(%ebp) movl 12(%ebp),%eax pushl %eax movsbl -1(%ebp),%eax pushl %eax call func addl $8,%esp.L1: leave // 和下一条指令一起完成恢复老的基地址指针, 将栈顶 ret // 指针恢复到调用前参数压栈后的位置, 并返回调用者.Lfe1:.size func,.lfe1-func.ident "GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)" 请说明字符型参数和长整型参数在参数传递和存储分配方面有什么区别 ( 小于长整型 size 的整型参数的处理方式和字符型参数的处理方式是一样的 ) 2013.11.23 6.2 一个 C 程序的三个文件 head.h file1.c 和 file2.c 的内容分别如下 : head.h: file1.c: file2.c: short int a = 10; #include "head.h" #include "head.h" 在 X86/Linux 机器上的编译命令如下 : cc file1.c file2.c 编译结果报错的主要信息如下 : multiple definition of a 试分析为什么会报这样的错误

6.3 考虑下面的 C 语言程序 : char cp1, cp2; cp1 = "12345"; cp2 = "abcdefghij"; strcpy(cp1,cp2); printf("cp1 = %s\ncp2 = %s\n", cp1, cp2); (a) 该程序经先前某些 C 编译器的编译, 其目标程序的运行结果是 : cp1 = abcdefghij cp2 = ghij 试分析, 为什么 cp2 所指的串被修改了? (b) 在 x86/linux 机器上经 gcc 编译器编译后, 该程序运行时, 操作系统报告段错误 (segmentation error) 并终止运行, 请分析原因 6.6 下面是 C 语言两个函数 f 和 g 的概略 ( 它们不再有其它的局部变量 ): int f (int x) { int i; return i +1; int g (int y) {int j; f (j +1); 请按照图 6.11 的形式, 画出函数 g 调用 f,f 的函数体正在执行时, 活动记录栈的内容及相关信息, 并按图 6.10 左侧箭头方式画出控制链 假定函数返回值是通过寄存器传递的 2013.11.16 5.9 修改 5.3.3 节的翻译方案, 使之能处理 : (a) 各种有值语句 赋值语句的值是赋值号右边的表达式的值, 条件语句或循环语句的值是语句体的值, 语句表的值是表中最后一个语句的值 (b) 布尔表达式 加上逻辑算符 and, or 及 not 和关系算符的产生式 然后给出适当的翻译规则, 它们检 查这些表达式的类型 5.13 在文件 stdlib.h 中, 关于 qsort 的外部声明如下 : extern void qsort(void, size_t, size_t, int ( )(const void, const void )); 下面 C 程序所在的文件名是 type.c, 用某个 C 编译器编译时, 错误信息如下 : type.c:18: warning: passing argument 4 of qsort from incompatible pointer type 请对该程序略作修改, 使得该警告错误能消失, 并且不改变程序的结果 注 : 程序中关于变量 asthypo 和 n 的赋值以及其他部分被略去 #include <stdlib.h> typedef struct{ int Ave; double Prob; HYPO; HYPO *asthypo; int n; int HypoCompare(HYPO *sthypo1, HYPO *sthypo2) { if (sthypo1->prob>sthypo2->prob){ return(-1); else if (sthypo1->prob<sthypo2->prob) {

return(1); else{ return(0); /* end of function HypoCompare */ qsort ( asthypo,n,sizeof(hypo),hypocompare); 2013.11.9 4.10 文法如下 : S ( L ) a L L, S S (a) 写一个翻译方案, 它输出每个 a 的嵌套深度 例如, 对于句子 ( a, ( a, a) ), 输出的结果是 1 2 2 (b) 写一个翻译方案, 它打印出每个 a 在句子中是第几个字符 例如, 当句子是 ( a, ( a, ( a, a ), (a) ) ) 时, 打印的结果是 2 5 8 10 14 4.13 下面是构造语法树的一个 S 属性定义 将这里的语义规则翻译成 LR 翻译器的栈操作代码段 E E1 + T E.nptr = mknode ('+', E1.nptr, T.nptr) E E1 T E.nptr = mknode (' ', E1.nptr, T.nptr) E T E.nptr = T. nptr T ( E ) T.nptr = E. nptr T id T.nptr = mkleaf ( id, id.entry) T num T.nptr = mkleaf ( num, num.val) 2013.11.2 4.5 给出对表达式求导数的语法制导定义, 表达式由 + 和 * 作用于变量 x 和常数组成, 如 x*(3*x + x*x), 并假定没有任何化简, 例如将 3*x 翻译成 3*1+0*x 2013.10.26 3.21 证明下面文法 S Aa bac dc bda A d 是 LALR(1) 文法, 但不是 SLR(1) 文法 3.31 为语言 L = { w w (a b)* 并且在 w 的任何前缀中,a 的个数不少于 b 的个数 写三个文法, 它们分别是 LR(1) 的 二义的和非二义且非 LR(1) 的 2013.10.19 3.18. 考虑下面的文法 E E + T T T T F F F F* a b (a) 为此文法构造 SLR 分析表 (b) 构造 LALR 分析表

3.20 (a) 证明下面文法 S AaAb BbBa A ε B ε 是 LL(1) 文法, 但不是 SLR(1) 文法 2013.10.5 3.10 构造下面文法的 LL(1) 分析表 D TL T int real L id R R, id R ε 3.11 下面的文法是否为 LL(1) 文法? 说明理由 S A B P Q x A x y B b c P d P ε Q a Q ε 2013.9.21 2.11 可以从正规式的最简 DFA 同构来证明两个正规式等价 使用这种技术, 证明正规式 (a b) (a b ) 和 ( (ε a )b ) 等价 3.4 文法 R R ' ' R R R R ( R ) a b 产生字母表 {a, b 上所有不含 ε 的正规式 注意, 第一条竖线加了引号, 它是正规式的或运算符号, 而不是文 法产生式右部各选择之间的分隔符, 另外星号 在这儿是一个普通的终结符 该文法是二义的 (a) 证明该文法产生字母表 {a, b 上的所有正规式 (b) 为该文法写一个等价的非二义文法 它给予算符 连接和 的优先级和结合性同 2.2 节中定义的一致 (c) 按上面两个文法构造句子 ab b a 的分析树 2013.9.14 2.4 为下列语言写正规定义 (e) 最多只有一处相邻数字相同的所有数字串