logo资料库

厦大2009年编译原理期中试题.doc

第1页 / 共1页
资料共1页,全文预览结束
厦门大学《编译原理》课程试卷 计算机学院计算机系 2009 年级计算机科学与技术专业 主考教师:_史晓东_试卷类型:(期中) 注意: 考试时间为 90 分钟,试卷满分为 100 分; 答案写在答卷纸上 1. (20 分) 基础知识。 (1)(10 分)一个编译程序可以分成几个阶段(phases)?请给出每个阶段的输入输出。 (2)(5 分)给出上下文无关文法的定义。 (3)(5 分)lex(flex)在编译中起什么作用?简述 lex 的工作原理。 2. (10 分)对以下 C 程序: int if0; int m(int x) { int if0; if (if0<’0’); if0 = x*x; return m(iffy); 一个编译器可能会给出哪些下面的陈述? 词法错误:if0 不是有效的标志符; 语法错误:if 语句不完整; 语义错误:变量 if0 和’0’不能比较; 逻辑错误:死循环; 没有错误:该程序是合法的 C 程序。 } 简要说明理由。你认为编译器还应该给出那些警告? 3. (15 分) 写出字母表 = {a, b}上语言 L = {w | w 中 a 的个数是偶数}的正规式,并画出接 受该语言的最小状态 DFA。 4. (15 分)Unix shell 的简单命令可以是执行文件名,输入输出用重定向来表示。若干可执 行文件可以用管道运算连接起来。假设第一个可执行才能有输入重定向,最后一个可执 行才有输出重定向。命令的例子如: simple > outfile < infile lexer < goodfile.c | parser | translator > bug.txt (a) 请用 CFG 写出该命令语言的文法,假设文件名、’<’、’>’、’|’为终结符; (b) 对上面两个例子,画出分析树。 5. (20 分)已知文法 G (S 为开始符)为: S→ id := E E→ id | num | E + E (1)求出 First(E)和 Followt(E), (2)并给出与 G 等价的 LL(1)文法 G'。 (3) 对你给出的文法 G', 构造句子 id :=num+id 的规范推导,并指出每个右句型的句柄 6. (20分) 文法G (S为开始符)为: S→ i E t S e S | i E t S E→b (1)(5分)证明该文法是二义的 (2)(10分)画出LR(0)自动机的项集,指出是否存在冲突。 (3)(5分)说明如用YACC,如何消除二义性。
分享到:
收藏