课程设计任务书
题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)
初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体
要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2013年月日
系主任(或责任教师)签名: 2013年月日
IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)
1 系统描述
1.1题目
IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)
1.2.目的
通过设计、编制、调试一个条件语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
1.3.设计内容及步骤
对条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉
(1)按给定的题目写出符合语法分析方法要求的文法和属性文法描述。
(2)按给定的题目给出语法分析方法的思想及分析表设计。
(3)按给定的题目给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
2 文法及属性文法的描述
2.1文法
文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法分析程序。
IF-ELSE条件语句的文法G[S]如下所示:
(1) S -> CM
(2) S -> TM
(3) M -> begin L end
(4) C -> if B then
(5) T -> C M else
其中非终结符B为布尔表达式,其文法G[B]如下:
(1) B -> B1 or B2
(2) B -> B1 and B2
(3) B -> not B1
(4) B -> ( B1 )
(5) B -> id1 rop id2
(6) B -> true
(7) B -> false
而在文法G[S]中非终结符L表示赋值语句块,其文法G[L]如下:
(1) L -> L1 A ;
(2) L -> A;
(3) A -> id = M
(4) M -> E
(5) E -> E1 + E2
(6) E -> E1 * E2
(7) E -> -E1
(8) E -> ( E1 )
(9) E -> id
2.2属性文法
属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。
在一个属性文法中,对应于每个产生式A→a都有一套与之相关联的语义规则,每
规则的形式为:b:=f(c
1,c
2
,…,c
k
)其中f是一个函数,而且或者①b是A的一个综合属
性并且c
1,c
2
,…,c
k
是产生式右边文法符号的属性或者②非终结符既可有综合属性也可
有继属性,文法开始符号的所有继承属性作为属性计算前的初始值[1]。
2.2.1 语义变量和语义动作说明
对于文法G[L],首先对id表示的单词定义一属性https://www.doczj.com/doc/8210554855.html,,用做语义变量,用Lookup(https://www.doczj.com/doc/8210554855.html,)语义函数审查https://www.doczj.com/doc/8210554855.html,是否出现在符号表中,如在,则返回一指向该登陆项的指针,否则返回nil。语义过程emit表示输出四元是到输出文件上。语义过程newtmp表示生产一临时变量,每调用一次,生成一新的临时变量。语义变量E.place,表示存放E值的变量名在符号表的登陆项或一整数码(若此变量时一个临时变量)[2],2.2.1 给出了翻译赋值语句块到三地址的语义描述。
2.2.1 G[S]的属性文法为:
(1) S -> CM { S.chain := merge(C.chain,M.chain) }
(2) S -> TM { S.chain := merge(T.chain,M.chain) }
(3) M -> begin L end { M.chain := L.chain}
(4) C -> if B then { bakpatch(B.true,nextstat)
C.chain := B.false}
(5) T -> C M else { q := nextstat
emit(‘GOTO’--)
backpatch(C.chain,nextstat)
T.chain := merge(M.chain,q)}
2.2.2 G[B]的属性文法为:
(1) B -> B1 or B2 { backpatch(B1.false,B2.codebgin);
B.codebegin := B1.codebegin;
B.true := merge(B1.true,B2.true);
B.false := B2.false}
(2) B -> B1 and B2 { backpatch(B1.true,B2.codebegin);
B.codebegin := B1.codebegin;
B.true := B2.true;
B.false := merge(B1.false,B2.false);}
(3) B -> not B1 { B.true := B1.false;
B.codebegin := B1.codebegin;
B.false := B1.true;}
(4) B -> ( B1 ) { B.true := B1.true;
B.codebegin := B1.codebegin;
B.false := B1.false;}
(5) B -> id1 rop id2 { B.true := nextstat;
B.codebegin := nextstat;
B.false := nextstat+1;
emit(‘if’id1.place‘rop’id2.place‘goto’--); emit(‘goto’--)}
(6) B -> true { B.true := nextstat;
B.codebegin := nextstat;
emit(‘goto’--)}
(7) B -> false { B.false := nextstat;
B.codebegin := nextstat;
emit(‘goto’--)}
其中nextstat给出在输出序列中下一三地址式子的序号。emit过程没调用一次,nextstat增加1
2.2.3 G[L]的属性文法为:
(1) L -> L1 A ; { L.chain := A.chain}
(2) L -> A; { L.chain := A.chain}
(3) A -> id := M { p := lookup(https://www.doczj.com/doc/8210554855.html,);
if p ≠ nil then
emit(p ‘:=’ E.place);
else error}
(4) M -> E { }
(5) E -> E1 + E2 { E.place := newtemp;
emit(E.place ‘:=’E1.place ‘+’ E2.place)}
(6) E -> E1 * E2 { E.place := newtemp;
emit(E.place ‘:=’ E1.place ‘*’ E2.palce)}
(7) E -> -E1 { E.palce := newtemp;
emit(E.place ‘:=’ ‘minus’E1.place)}
(8) E -> ( E1 ) { E.place := E1.place }
(9) E -> id (6)A->num { p := lookup(https://www.doczj.com/doc/8210554855.html,);
if p ≠ nil then
E.palce := p
else error}
3 语法分析方法描述及语法分析表设计
3.1简单优先法的定义构造及优缺点
3.1.1简单优先法定义构造
一个文法G,若它不含ε产生式,也不含任何右部相同的不同产生式,并且它的任何符号对(X,Y),或者没有关系,或者存在下述三种关系:=、<、>之一,则称该文法是一个简单优先文法。
A)X=Y当且仅当G中含有形如P→…XY…的产生式
B)X C)X>Y当且仅当Y为G的终结符,G中含有形如P→…QR…的产生式,其中Q,R为非终结符,且Q →…X,Y∈First(R) D)对任何X,若文法开始符号S→X…,则# 3.1.2简单优先法的优缺点 优点:准确、规范,技术简单。 缺点:适用的范围小,构造的分析表太大,分析效率较低。 3.2语法分析 为实现简单优先算法,可以使用工作栈.用以寄存操作数或运算结果.算法的基本思想是: (1) 置初始状态:S(1):=‘#’, i:=1, j:=1 (2) 若 S(i)与T(j)无任何关系,则出错停机 (3) 若 S(i)= T(j)或S(i)〈T(j),则把T(j)送入S栈中,读下一符,转(2)。 (4) 若S(i)〉T(j),则从S栈顶开始往前栈串Sj1 ,Sj1+1,…,Si 其中 Sj1为第一个使 Sj1-1〈Sj1 ,然后用Sj1,Sj1+1,…Si去查生产式表, 若查到有相同右部的产生式即U→Sj1,Sj1+1,…Si,则从栈中退掉子串 Sj1,Sj1+1,…Si,并把U进栈;然后转(2)。若查不到转出错处理。 (5) 若T(j)=‘#’,并且S栈的内容为# Z(Z为文法开始符号)则正确停机。否则,出 错停机。 3.3语法分析表设计 3.3.1 G[S]的优先关系表如表1: 表 1 G[S] 的优先关系矩阵 S C T M begin L end if B then else # S < > C = < T = < M = > begin < = L end > > if = B = then > > else > > # < < < < < < 注:表中空白表示无优先关系,分析过程中查找到无优先关系的两个文法符号则表示出错,下同。 3.3.2 G[B]的优先关系表如表2: 表 2 G[B] 的优先关系矩阵 B or and not ( ) id rop true fasle # B = = = > or < < < and < < not < > ( ) > id > > = > rop = true > > > false > > > # < < < < 注:表中id代表标识符,rop代表关系运算符,下同。 3.3.2 G[L]的优先关系表如表3: 表 3 G[L] 的优先关系矩阵 L A ; := ( ) id + - M E * # L = < > A = > ; > > := < < < = < ( < = ) > < id > = > > > + > < < = - < < = M > E > < = = = * > < < = # < < < 4.中间代码形式的描述及中间代码序列的结构设计 4.1中间代码形式描述 此设计要求使用的是三地址的中间代码,三地址代码是由下面一般形式构成的语句序列: x:=y op z; 其中x,y,z为变量名,常数或编译时产生的临时变量;op代表运算符号如标点,浮点运算符号等等。每个语句的右边只能有一个运算符。 表达式x + y * z翻译成的三地址语句序列是: t1 := y * z t2 := x + t1 常用的三地址语句有: 赋值语句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 4.2中间代码序列的结构设计 本次课程设计采用四元式的中间代码形式,例如 赋值语句x := y*z*a的三地址表示如下: 001: T1:= a * z 002: T2:= T1 * y 003: x:= T2 if-else语句块: if a>b and c begin p= q+r+s; c =w; end 的三地址表示如下: 001: if a > b goto 3 002: goto -- 003: if c < d goto 5 004: goto -- 005: T1:= s + r 006: T2:= T1 + q 007: p:= T2 008: c:= w 其中前面的数字表示三地址的序列号或者说是中间代码的地址,Ti 为中间代码翻译过程中产生的临时变量,符号‘—’,表示在后续的翻译过程中待回填的goto 语句转移地址。 5 编译系统的概要设计 5.1程序总体描述 本设计体现语法制导翻译的思想,采用单遍的翻译方法,在语法分析的过程中同时完 成词法分析和中间代码的翻译。 图1 程序总体概要设计 源文件 词法分析 语法分析 中间代码 出错处理 三地址输出文件 5.2 数据结构设计 5.2.1 用于“回填”和“拉链”的链表结构设计如下: struct Chain { int label; // 三地址代码语句的序号 Chain* next; // 下一个节点指针 }; 5.2.2 属性单词Token的数据结构如下: struct Token { char name[20]; //名字 Classify kind; // 类型 Chain* trueChain; // “真链” Chain* falseChain; // “假链” Chain* chain; // 待“回填”的链 int codeBegin; // 非终结符的第一个三地址语句序号 int weight; // 该变量用于计算归约用的的产生式序号① int pos; // 文法符号在优先关系表中的位置 int place; // 属性单词在符号表中的登陆项 double value; // 数值型单词的值,其他类型无定义 int lineNumber; // 单词所在源文件的行号 char orig[20]; // 如为非终结符,该变量用于保存被规约 // 成该非终结符的终结符,否则无定义 } 5.2.3 三地址码数据结构设计 struct TripleCode { CodeKind kind; // 三地址语句格式种类② char op; // 运算符 char result[20]; // 运算结果 char opn1[20]; // 操作数1 char opn2[20]; // 操作数2 int destination; // goto语句的转移地址 bool term0; // 结果变量是否是终结符 bool term1; // 操作数1是否是终结符 bool term2; // 操作数2是否是终结符 int serial0; // 如结果为临时变量,用于保存该临时变量的序列号 int serial1; // 如果操作数1为临时变量,用于保存该临时变量的 //序列号 int serial2; // 如果操作数2为临时变量,用于保存该临时变量的 //序列号 }; ①根据产生式的序号和产生式右边文法符号的个数,给产生式右边每个文法符号赋予一定的weight值,在规约的时候,产生式右边各个文法符号的weight域相加的和为该产生式的序号,从而确定用哪条产生式规约。 ②三地址代码的格式设计为5种,分别是“if-goto”型、“goto”型、赋值型、单目运算型和双目运算型 5.3程序接口声明 5.3.1.1 词法分析器类Lexical的类图 图2 Lexical类 class Lexical Attributes private char ch private int U_inde private int lineNum private int len private int buffEnd private double value private ifstream fin private ofstream fout private string outputFile private static int serial private static int nextstat private char line[100] private char word[40] private int buffer[MAX_BUFFER_SIZE] private Token tokens[MAX_SYMBOL_SIZE] private TripleCode codes[MAX_CODE_NUM] private char separators[SEPARATOR_COUNT] private char* keywordTable[KEYWORD_COUNT] private char* operators[OPERATOR_COUNT] Operations public Lexical() public ~Lexical() public Token* getNextToken() public Token* getNewToken() public int lookup() public void emit() public void genCode() public void printCode() public void backpatch() public void putBackToken() public void writeCodeToFile() public static inline int getNextStat() public static int getSerialNum() private int getChar() private void getWord() private void skipSlash() private void getLine() private int findKeyword() private int findSeparator() private void readOperator() private double string2Double() 5.3.1.2 Lexical类主要接口说明 public Token* getNextToken() // 返回源文件中的下一个属性单词的指针 public Token* getNewToken() // 返回符号表中下一个可用新项目的指针 public int lookup() // 语义函数,查找给定名字的单词是否在符号表中public void emit() // 语义函数,生成一条三地址代码并保存到三地址代 // 码数组中,emit过程每调用一次,nextstat增加1 public void genCode() // 语义函数,作用同emit,genCode每调用一次, // nextstat也增加1 public void printCode() // 输出三地址码到屏幕 public void backpatch() // 用于回填的函数 public void putBackToken() // 将属性单词写回到词法分析器中 public void writeCodeToFile() // 将三地址码输出到文件中 public static int getNextStat() // 返回下一条中间代码的语句号 5.3.2.1 模板类SStack类图 SStack Attributes private T *base private int size private int len private int top Oprations public bool isEmpty() public getLen() public void push() public void pop() public void getTop() public void clear() 图3 SStac类 5.3.2.2 SStack类接口说明 public bool isEmpty() // 判断栈是否为空 public getLen() // 返回当前栈中元素个数 public void push() // 将元素压入栈中 public void pop() // 栈顶元素出栈 public void getTop() // 取栈顶元素 public void clear() // 将栈清空 5.3.3 其他的程序接口 Token* processBoolean() // 处理布尔表达式文法的函数④ Token* processAssignmentBlock()⑤// 处理赋值语句块的函数 Chain* merge() // 合并链 6 详细的算法描述 6.1词法分析 词法分析是在语法和语义分析过程中进行的,其功能是为语法语义分析提供带属性的单词,管理和维护符号表,提供把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析。 单词的种类有五种。 关键字如if,then,else等。 标识符用户定义的变量名、常数名、过程名等。 运算符如:+,-,*,/,>,<等。 常数如13,34,67等。 界符如“,”“;”“(”“)”“{”“}”等。 词法分析流程图如图4: 图4 词法分析流程图 6.2语法分析 语法分析的任务是识别单词符号序列是否符合给定的语法规则,并在规约时调用相应的语义函数,执行中间代码的翻译。语法分析过程还包含简单的错误处理机制。 语法分析流程图如下: 开始 初始化词法分析 器及符号栈 从词法分析器取下 一个单词 为文件结束 符? 查优先关系表,得栈顶元 素与输入单词优先关系 无关系? 栈顶元素优先级 大于输入单词? 栈顶元素出栈 栈顶元素优先级大 于或等于出栈元 素? 用所有弹栈的元素作为产生式右部规约 规约成开始 符号?出错处理 当前输入单词 进栈 规约后的符号 进栈 图5 语法分析 7 软件的测试方法和测试结果 7.1.1 测试用例1 测试用源文件如下: if a f then begin x = y*z*a; d= -h; p= q+r+s; c =w; end #$ 其中“#”为文法结束标志,“$”为文件结束标志,下同。运行结果如下图6, 图6 用例1运行结果①文件输出结果为: 001: if a < b goto 7 002: goto 3 003: if c < d goto 5 004: goto -- 005: if e > f goto 7 006: goto -- 007: T1:= a * z 008: T2:= T1 * y 009: x:= T2 010: T3:= - h 011: d:= T3 012: T4:= s + r 013: T5:= T4 + q 014: p:= T5 015: c:= w ①图中的“goto --",表示布尔表达式的假出口,下同。 7.1.2 测试用例2 测试用源文件如下: if a>b and c begin x = y*z*a; d= -h; p= q+r+s; c =w; end else begin x = y*z*a; d= -h; p= q+r+s; c =w; end #$ 运行结果如下图7, 图7 用例2运行结果7.1.3 测试用例3 测试用源文件如下: if a f then begin x = y*z*a; d= -h; p= q+r+s; c =w; end # if a>b and c begin x = y*z*a; d= -h; p= q+r+s; c =w; end else begin x = y*z*a; d= -h; p= q+r+s; c =w; end #$ 运行结果如下图8, 图8 用例3运行结果7.1.3 测试用例4 测试用源文件如下: invalid beginning if a>b and c begin x = y*z*a; d= -h; p= q+r+s; c =w; end else begin x = y*z*a; d= -h; p= q+r+s; c =w; end #$ 运行结果如下图9 课程设计任务书 学生姓名:赵旭林专业班级:计算机0801班 指导教师:陈天煌工作单位:计算机科学与技术学院 题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2010年 11月 13日 系主任(或责任教师)签名: 2010年 11月 13日 《文言文句子的翻译》 【教学目的】 1、落实《考试说明》“阅读浅显文言文能力”的训练,集中训练文言句子翻译的能力。 2、在学生已掌握文言文翻译的一般原则、技巧的基础上,加强踩点得分意识,以难词难句为突破口,指导学生掌握好高考文言句子翻译的方法技巧。 【教学重难点】 1、抓关键词句(关键词语、特殊句式),洞悉得分点。 2、掌握解题步骤、翻译方法,学以致用。 3、借助积累(课内文言知识、成语、语法结构、语境等),巧解难词难句。 【教学设计】 1、本课以学法指导和能力训练为重点,帮助学生归纳系统的文言句子的翻译方法(直译),并指导其应用。 2、在学生掌握了“信、达、雅”三字翻译目标和“翻译六字诀”的基础上,针对学生在文言翻译中的盲点,力图引导学生总结归纳出解决翻译疑难的技巧,并通过训练验证这些技巧的可操作性,使学生能举一反三,从而增强文言文翻译的信心。 3、本设计重在让学生易于掌握,便于利用,注重实用性和可操作性。 【教学步骤】 一.课堂导入 1、提问:从高考的特点与考查目的出发,文言文翻译要严格遵循的两个原则是什么? 第一: 忠于原文,力求做到_____、_____、_____ 。(信达雅) 第二: 字字落实,以_____为主,以_____为辅(直译意译) (①让学生用自己语言表述文言文翻译“信、达、雅”三字原则的理解 ②直译:指译文要与原文保持对应关系,重要的词语要相应的落实,要尽力保持原文遣词造句的特点和相近的表达方式,力求语言风格也和原文一致。意译:指着眼于表达原句的意思,在忠于愿意的前提下,灵活翻译原文的词语,灵活处理原文的句子结构。) 2、提问: 文言文翻译的“六字决”? ①对:一般指把原名中的文言单音词对译为现代汉语的双音或多音词。 ②换:有些词语意义已经发展,用法已经变化,语法已经不用,在译文中,应换这些古语为今语。 ③留:人名、地名、年号、国号、庙号、谥号、书名、物名都保留不译;与现代汉语表达一致的词语可保留。 ④删:一些没有实在意义的虚词,如表敬副词、发语词、部分结构助词等,同义复用的实词或虚词中的一个和偏义复词中陪衬的词应删去。 ⑤补:省略的部分;词语活用相应的部分;代词所指的内容;使上下文衔接连贯的内容等。 目录 1 系统描述 (2) 1.1目的 (2) 1.2设计内容: (2) 1.3翻译过程 (2) 1.4初始条件: (3) 1.5 开发平台 (3) 2文法及属性文法的描述 (3) 3 语法分析表设计 (4) 3.1 LR分析概述 (4) 3.2 LR(0)分析表 (5) 3.3 LR语法分析过程的设计思想及算法 (7) 3.4 翻译方法 (8) 4 中间代码形式的描述及中间代码序列的结构设计 (8) 5简要的分析与概要设计 (9) 6详细的算法描述 (9) 6.1 main函数 (10) 6.2词法分析 (10) 6.3 语法分析 (12) 7 测试方法和测试结果 (13) 7.1测试过程 (13) 7.2 测试结论 (14) 8 研制报告 (14) 8.1研制过程 (14) 8.2本设计的评价 (15) 8.3个人心得体会 (15) 9 参考文献 (16) 本科生课程设计成绩评定表 (17) FOR循环语句的翻译程序设计 ——LR方法、输出四元式 1 系统描述 1.1目的 通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现词法分析程序对单词序列的词法检查和分析,并且实现对单词序列的语法分析、语义分析以及中间代码生成。 1.2设计内容: 本设计按照要求设计出for语句的简单文法,并使用LR分析法对用户输入的程序进行分析和翻译。 对下列正确的程序输入: for(i=0;i<10;i++) { m=m+i; } 结果程序要对该输入进行词法分析,然后利用LR分析法对词法分析后得到的单词序列进行语法分析,经过语法制导翻译显示出等价的四元式表示的中间代码。 对于错误的程序输入,如: for(i=0;i<10) { m=m+i; } 结果程序要指出程序出错。 1.3翻译过程 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: DO-WHILE循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2011年月日 系主任(或责任教师)签名: 2011年月日 DO-WHILE循环语句的翻译程序设计 (LL(1)法、输出三地址表示) 1. 系统描述 1.1 设计目的 通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 1.2 设计内容及步骤 对循环语句: DO〈赋值语句〉WHILE 〈表达式〉 (1)按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。 (2)按给定的题目给出语法分析方法的思想及分析表设计。 (3)按给定的题目给出中间代码序列的结构设计。 (4)完成相应的词法分析、语法分析和语义分析程序设计。 (5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 2. 文法及属性文法的描述 2.1 文法描述 K -> do L while S L -> SP P -> ;SP | ε S -> iQE E -> TG G -> +TG | -TG | εT -> FR R -> *FR | /FR | εF -> (E) | i Q -> = | < | > 2.2 属性文法的描述 文言文哲理句子加翻译 经典句子 文言文哲理句子加翻译 1、见侮而不斗,辱也。译:当正义遭到侮辱、欺凌却不挺身而出,是一种耻辱的表现。 2、不戚戚于贫贱,不汲汲于富贵。译:不为贫贱而忧愁,不热衷于发财做官。 3、一寸山河一寸金。译:祖国的每一寸山河比一寸黄金还要宝贵,是绝不能让给外人的。 4、勿以恶小而为之,勿以善小而不为。译:对任何一件事,不要因为它是很小的、不显眼的坏事就去做;相反,对于一些微小的。却有益于别人的好事,不要因为它意义不大就不去做它。 5、不迁怒,不贰过。译:犯了错误,不要迁怒别人,并且不要再犯第二次。 6、邑人奇之,稍稍宾客其父,或以钱币乞之。译:同县的人对他能作诗感到惊奇,渐渐地请他的父亲去做客,有的人还用钱求仲永题诗。 7、三人行,必有我师焉,择其善者而从之,其不善者而改之。译:三个人在一起,其中必有某人在某方面是值得我学习的,那他就可当我的老师。我选取他的优点来学习,对他的缺点和不足,我会引 以为戒,有则改之。 8、人生自古谁无死,留取丹心照汉青。译:自古以来,谁都难免会死的,那就把一片爱国的赤胆忠心留在史册上吧! 9、三人行,必有我师焉;择其善者而从之,其不善者而改之。译:几个人在一起走路,其中一定有人可以当我的老师。应当选择他们的优点去学习,看到自己也有他们的缺点就要改正。 10、中峨冠而多髯者为东坡。译:中间戴着高高的帽子长着浓密胡子的人是苏东坡。 11、有益国家之事虽死弗避。译:对国家有利的事情要勇敢地去做,就算有死亡的危险也不躲避。 12、良药苦于口而利于病,忠言逆于耳而利于行。译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。 13、少顷,但闻屏障中抚尺一下,满坐寂然,无敢哗者。译:过了一会儿,只听到围幕中抚尺一拍,全场都安静下来,没有一个敢大声说话的。 14、小来思报国,不是爱封侯。译:从小就想着报效祖国,而不是想着要封侯当官。 15、屠大窘,恐前后受其敌。译:屠户很窘迫,恐怕前后受到两狼的攻击。 16、宾客意少舒,稍稍正坐。译:宾客们的心情稍微放松了,身子渐渐坐正了。 课程设计任务书 学生姓名:辛波专业班级:计算机0707班 指导教师:彭德巍工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(递归下降法、输出四元式) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码四元式的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2010年 01月 08日 系主任(或责任教师)签名: 2010年 01月 08日 《文言文语句翻译》(高三参赛) 一、设计说明 高考对文言文语句翻译的考查,虽然材料选自课外,但是考查立足于课内,立足于考查学生对所学文言知识能否灵活运用之上,对学生理解并翻译语句能力的客观考查,符合课程改革和语文教学的发展方向。结合《课程标准》,立足教材本身,勾连高考试题,我设计引导学生在理解和运用语言的实践活动中悟法、学法、用法,调动学生自主、合作、探究学习的积极性,进行适合学生实际水平的有效复习。 该学案分三部分,课前案重在引导学生了解高考命题要求及考点阐释,通过自主复习,运用课内掌握的文言基础知识,总结出语句翻译的具体方法。课中案重在就学生自主反馈的翻译方法进行展示和纠正,以练—讲—练的形式,将课内例句与高考样题衔接起来,渐次推进,引导学生灵活运用翻译方法,总结答题规律,提升掌握语言文字的能力。课后案作为当日作业,旨在让学生夯实基础,巩固演练,继续钻研,锐意进取。二、材料依据 必修教材篇目《师说》《赤壁之战》《鸿门宴》《齐桓晋文之事》等,《〈史记〉选读》篇目《信陵君窃符救赵》《廉颇蔺相如列传》及08—10年高考部分省份样题。 三、设计内容: 学习目标: 知识与能力:了解并掌握文言文语句翻译的具体要求,探求翻译的具体方法。 过程与方法:解读考点,夯实旧知,练中悟法、学法。 情感态度与价值观:培养扎实严谨的学习作风。 课前复习步骤: 一、解读考点 阅读并勾画要点:考纲中“理解并翻译文中的句子”,意思是说“翻译”须以“理解”为前提,“理解”,就是准确把握字句在文段中的正确的意义;而“翻译”则是将文言句子译为规范的现代汉语。考查的句子是有特点的,在实词、虚词、句式、活用、通假字等方面有典型性的句子。测试题目出在“课外”,答案在“课内”。这里“课外”的含义一般指“选材”是学生没学过的,题目是没做过的;“课内”的含义可从两个方面理解:一是指测试的知识是学生“课内”学过的,二是学生可以利用学过的知识加以推断。 二、明确原则 文言文语句翻译原则——信(忠实原文)、达(文意通达流畅)、雅(语言富有文采)。 三、链接课内 根据参考篇目,结合梳理笔记,复习文言基础知识。 四、探求方法 1、翻译下列句子,注意句中划线和括号处,并用一个词概括所用方法。要求书写规范。第一组:魏安釐王二十年,秦昭王已破赵长平军,又进兵围邯郸。 译文:。 劳苦而功高如此,未有封侯之赏…… 译文:。 WHILE循环语句的翻译程序设计(简单优先法、输出四元式) 1 需求说明或问题描述 1.1 问题描述 对C++中while循环语句的理解及分析,通过编译中的词法分析、语法分析、语义分析及中间代码生成等编译过程,用简单优先分析法分析并翻译while语句。 1.2 需求说明 1 写出符合给定的语法分析方法的文法及属性文法 2 完成题目要求的中间代码四元式的描述 3 写出给定的语法分析方法的思想,完成语法分析及语义分析程序设计 4 设计若干用例,上机通过测试 2 文法及语法设计 2.1文法及属性文法: 文法G=(V N ,V T ,P ,S) 其中V N={S , B, E, C, A, B, P, T} V T={w, (, ), { ,}, i, ;} P={ S -> w(B){E} E -> C C -> CA C -> A A -> iPA A -> i; P -> +|-|*|/ B -> iTi B-> i T -> >|<|>=|<=|== } 2.2 语法分析方法描述及语法分析表设计 2.2.1 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
文言文句子的翻译
FOR循环语句的翻译程序设计
DO-WHILE循环语句的翻译程序设计
文言文哲理句子加翻译
for循环语句的翻译
《文言文语句翻译》
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)