编译IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)代码+报告
编译原理—pl0实验报告
PL/0实验报告课程名称编译原理题目名称PL/0编译程序学生学院计算机科学与技术学院专业班级学号学生姓名班内序号山东理工大学实验报告纸第 1 页姓名:蔡鹏飞计算机院_11_级02班同组者成绩_________室温:气压:课程名称:编译原理教师签字实验项目编号(1)PL/0编译程序的分析指导教师鞠传香实验目的1.熟悉pl/0语言并能编写小程序2.掌握pl/0编译程序的编译过程(词法分析、语法分析、语义分析等)实验仪器(编号)材料、工具PC机、VC++6.0(原理概述)pl/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。
词法分析和代码生成作为独立的子程序供语法分析程序调用。
语法分析的同时,提供了出错报告和出错恢复的功能。
在源程序没有错误编译通过的情况下,调用类pcode解释程序解释执行生成的类pcode代码。
PL/0语言文法的EBNF表示EBNF表示的符号说明。
〈〉:用左右尖括号括起来的中文字表示语法构造成分,或称语法单位,为非终结符。
∷= :该符号的左部由右部定义,可读作'定义为'。
| :表示'或',为左部可由多个右部定义。
{ } :花括号表示其内的语法成分可以重复。
在不加上下界时可重复0到任意次数,有上下界时为可重复次数的限制。
如:{*}表示*重复任意次,{*}38表示*重复3-8次。
[ ] :方括号表示其内的成分为任选项。
( ) :表示圆括号内的成分优先。
例:用EBNF描述<整数>文法的定义:<整数>∷=[+|-]<数字>{<数字>}<数字>∷=0|1|2|3|4|5|6|7|8|9或更好的写法<整数>∷=[+|-]<非零数字>{<数字>}|0<非零数字>∷=1|2|3|4|5|6|7|8|9<数字>∷=0|<非零数字>PL/0语言文法的EBNF表示PL/0语言文法的EBNF表示为:〈程序〉∷=〈分程序〉.〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉〈常量说明部分〉∷=CONST〈常量定义〉{,〈常量定义〉};〈常量定义〉∷=〈标识符〉=〈无符号整数〉〈无符号整数〉∷=〈数字〉{〈数字〉}〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉};〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉}〈过程说明部分〉∷=〈过程首部〉〈分程序〉{;〈过程说明部分〉};〈过程首部〉∷=PROCEDURE〈标识符〉;〈语句〉∷=〈赋值语句〉|〈条件语句〉|〈当型循环语句〉|〈过程调用语句〉|〈读语句〉|〈写语句〉|〈复合语句〉|〈空〉〈赋值语句〉∷=〈标识符〉∶=〈表达式〉〈复合语句〉∷=BEGIN〈语句〉{;〈语句〉}END〈条件〉∷=〈表达式〉〈关系运算符〉〈表达式〉|ODD〈表达式〉〈表达式〉∷=[+|-]〈项〉{〈加法运算符〉〈项〉}〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}〈因子〉∷=〈标识符〉|〈无符号整数〉|'('〈表达式〉')'〈加法运算符〉∷=+|-〈乘法运算符〉∷=*|/// 栈顶指针减一相关过程:base(),interpret()。
if-elif-else语句 -回复
if-elif-else语句-回复if-elif-else语句是一种条件语句,用于根据不同的条件执行不同的代码块。
它允许我们在程序中进行多个条件的判断,并根据不同的条件执行相应的代码。
在本文中,我们将逐步讨论if-elif-else语句的使用方法和实际应用场景。
在Python中,if-elif-else语句的基本语法如下:if 条件1:代码块1elif 条件2:代码块2else:代码块3让我们以一个例子来解释if-elif-else语句的用法。
假设我们要写一个程序,根据用户输入的成绩输出相应的评语。
我们可以按照以下步骤来完成:步骤1:使用input函数获取用户输入的成绩,并将其存储在一个变量中。
pythonscore = int(input("请输入你的成绩: "))在这个例子中,我们使用int函数将输入的成绩转换为整数类型,以便与后续的条件判断进行比较。
步骤2:使用if-elif-else语句根据不同的条件输出相应的评语。
假设,成绩在90及以上为优秀,80至89为良好,70至79为中等,60至69为及格,60以下为不及格。
pythonif score >= 90:print("优秀")elif score >= 80:print("良好")elif score >= 70:print("中等")elif score >= 60:print("及格")else:print("不及格")在这个例子中,根据用户输入的成绩,程序会逐个判断每个条件,并执行相应的代码块。
如果没有任何一个条件满足,则执行else语句的代码块。
通过这个例子,我们可以看到if-elif-else语句的工作原理。
程序将按顺序检查每个条件,并执行条件为True的代码块。
一旦某个条件被满足,剩下的条件将不再被检查。
C语言程序设计-第四章简单计算器小程序-分支程序设计
P1 逻辑运算符 P2
或
逻辑运算符 P2
课堂练习: 求下面逻辑表达式的值: 2>1 && 4 && 7<3+!0
值为0
等价于((2>1)&&4)&&(7<(3+(!
1 条件运算符和条件表达式 1.2 逻辑运算—逻辑运算的重要规则
a&&b:当a为0时,不管b为何值,结果为0
课堂练习:有下面定义的语句和逻辑表达式: int a=0,b=10,c=0,d=0 a && b && (c=a+10,d=100) 逻辑表达式执行后,a,b,c,d的值各为多少?
任务实现效果演示 例题源代码:switchcalculator.c
相关知识 1. switch语句 2. break语句
1 switch多分支选择结构
❖ 尽管用if…else if结构可以实现多分支,注但意当:分常支量较表多达时式,必程须序是结整构型较、复字杂符。型或枚举类型,不能是 实型表达式,每个case关键字后的常量表达式应互不相同
值为0 等价于i==(k>j),值为1
1 条件运算符和条件表达式 1.2 逻辑运算—逻辑运算符与逻辑表达式
&&(逻辑与)、||(逻辑或)、!(逻辑非)(单目)
逻辑表达式的一般形式:
优先级: 1.由低到高: ||→ && → !; 2.多种运算符一起: = →|| →&& →关系运算符 →算术运算符→ !。
【】 简单计算器小程序:由用户输入运算数和四则运算符(+、-、*、/),输出计算结果。
【】
4-3-2ifelifelse语句的应用课件 粤教版(2019)高中信息技术必修1
C if _______________:
print("YES") else:
print("NO")
A.num%2 = 0 or num%3 =0
B.num%2 == 0 or num%3 ==0
C.num%2 == 0 and num%3 ==0
D.num%2 = 0 and num%3 =0
一、 if…elif…else语句的应用
例题
先用变量a保存数字7, 然后从键盘输入一个整数b,
编程思路 (2)绘制流程图
接下来判断a与b之间的关系:
如果b与a相等,则提示:猜对了;
如果b大于a,则提示:猜大了;
如果b小于a,则提示:猜小了;
最后显示游戏结束。
一、 if…elif…else语句的应用
粤教版信息技术必修一《数据与计算》第四章《程序设计基础》
0.复习:单分支if语句
例题
先用变量a保存数字7,再输入一个整数b,
如果a与b相等,则提示:猜对了;
如果a与b不相等,则提示:猜错了
最后显示游戏结束。
a=7
b = int(input("请输入你猜的数b="))
if a==b:
#如果a与b相等
Байду номын сангаас
关系(关系如下展示),已知爸爸32岁,妈妈31岁,小智9岁,弟弟3岁,请问小智他们
B 买门票花了(
)钱。(price表示门票价格, age表示年龄):
if age>=18:
一、 if…elif…else语句的应用
例题
先用变量a保存数字7, 然后从键盘输入一个整数b, 接下来判断a与b之间的关系: 如果b与a相等,则提示:猜对了; 如果b大于a,则提示:猜大了; 如果b小于a,则提示:猜小了; 最后显示游戏结束。
ifelse语句
ifelse语句条件语句,是程序中根据条件是否成⽴进⾏选择执⾏的⼀类语句,这类语句在实际使⽤中,难点在于如何准确的抽象条件。
例如实现程序登录功能时,如果⽤户名和密码正确,则进⼊系统,否则弹出“密码错误”这样的提⽰框等。
本部分对于条件语句的介绍,重点在于语法讲解和基本的使⽤,更详细的使⽤参看后续的综合⽰例部分。
if else语句该类语句的语法格式为:if(条件表达式)功能代码;语法说明:if是该语句中的关键字,后续紧跟⼀对⼩括号,该对⼩括号任何时候不能省略,⼩括号的内部是具体的条件,语法上要求该表达式结果为boolean类型。
后续为功能的代码,也就是当条件成⽴时执⾏的代码,在程序书写时,⼀般为了直观的表达包含关系,功能代码⼀般需要缩进。
需要特别注意的是:1、这⾥的功能代码只能是⼀⾏,关于多⾏结构的功能代码,后续将说明。
2、 if(条件表达式)后续⼀般不书写分号if语句的执⾏流程为:如果条件表达式成⽴,则执⾏功能代码,如果条件表达式不成⽴,则不执⾏后续的功能代码。
⽰例代码:int a = 10;if(a >= 0)System.out.println(“a是正数”);if( a % 2 == 0)System.out.println(“a是偶数”);在该⽰例代码中,第⼀个条件是判断变量a的值是否⼤于等于零,如果该条件成⽴则执⾏输出,第⼆个条件是判断变量a是否为偶数,如果成⽴也输出。
注意以下代码的执⾏流程:int m = 20;if( m > 20)m += 20;System.out.println(m);按照前⾯的语法格式说明,只有m+=20;这⾏代码属于功能代码,⽽后续的输出语句和前⾯的条件形成顺序结构,所以该程序执⾏以后输出的结果为20.如果当条件成⽴时,需要执⾏的语句有多句,则可以使⽤语句块来进⾏表述,语法格式如下:if(条件表达式){功能代码块;}使⽤这种语法格式,使⽤⼀个代码块来代替前⾯的功能代码,这样可以在代码块内部书写任意多⾏的代码,⽽且也使整个程序的逻辑⽐较清楚,所以在实际的代码编写中推荐使⽤该种逻辑。
C语言if语句的使用讲解
C语言if语句的使用讲解C语言if语句的使用讲解if语句(if statement)是指编程语言(包括c语言,C#,VB,汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
下面是店铺为大家整理的C语言if语句的使用讲解,欢迎参考~if语句的使用用if语句可以构成分支结构。
它根据给定的条件进行判断,以决定执行某个分支程序段。
C语言的if语句有三种基本形式。
语句的三种形式1) 第一种形式为基本形式:ifif(表达式) 语句其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
【例1】#includeint main(void){int a,b,max;printf(" input two numbers: ");scanf("%d%d",&a,&b);max=a;if (maxprintf("max=%d",max);return 0;}本例程序中,输入两个数a、b。
把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。
因此max中总是大数,最后输出max的值。
2) 第二种形式为: if-elseif(表达式)语句1;else语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。
【例2】#includeint main(void){int a, b;printf("input two numbers: ");scanf("%d%d",&a,&b);if(a>b)printf("max=%d ",a);elseprintf("max=%d ",b);return 0;}输入两个整数,输出其中的大数。
改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。
语义分析和语法制导翻译-编译原理-06-(二)
是语法结构树指针 是名字的表项入口 是数值
id.entry num.val
树构造函数
mknode 建中间结点 mkleaf 建叶结点
生成语法树的属性文法
产生式 S→id:=E 语义规则 S.p:= mknode(':=', mkleaf(id, id.entry), E.p)
E→E1+E2 E.p:= mknode('+', E1.p, E2.p) E→E1*E2 E.p:= mknode('*', E1.p, E2.p) E→ -E1 E→ (E1) E→ id E→ num E.p:= mknode('-', 0, E1.p) E.p:= E1.p E.p:= mkleaf(id, id.entry) E.p:=mkleaf(num,num.val)
翻译模式的设计
D → T { L.in := T.type } L T → int { T.type := integer } T → real { T.type := real } L → { L1.in := L.in } L1 , id { addtype(id.entry, L.in) } L → id { addtype(id.entry, L.in) }
从其兄弟结点和父结点的属性值计算出来的 如:L.in
固有属性(单词属性)
属性的计算
构造语法分析树,填加响应的语义规则 综合属性
自底向上按照语义规则来计算各结点的综
合属性值
继承属性
需要探讨计算次序
例6-3:3*5+4 的
语法树与属性计算
E.val=15 T.val=15 T.val=3 F.val=3 digit.attr=3 *
实验4分支结构程序设计
实验4分支结构程序设计分支结构是程序设计中常用的一种控制结构,通过判断条件的真假来选择不同的执行路径。
在实验4中,我们将学习如何使用分支结构来设计程序。
一、分支结构的基本语法在分支结构中,根据条件的真假执行不同的代码,主要有以下几种语法结构:1. if语句: if语句是最基本的分支结构,用于根据条件执行不同的代码块。
语法如下:if (条件)//条件为真时执行的代码} else//条件为假时执行的代码其中,条件是一个表达式,如果表达式的值为真,则执行if语句块中的代码;否则执行else语句块中的代码。
2. if-else if-else语句:用于根据多个条件选择执行不同的代码。
语法如下:if (条件1)//条件1为真时执行的代码} else if (条件2)//条件1为假,条件2为真时执行的代码} else//条件1和条件2都为假时执行的代码在这种结构中,多个条件会按照顺序依次被检查,一旦一些条件为真,相应的代码块即被执行,后续的条件判断将被略过。
3. switch语句:用于根据不同的表达式值选择执行不同的代码块。
语法如下:switch (表达式)case 值1://表达式的值与值1相等时执行的代码break;case 值2://表达式的值与值2相等时执行的代码break;...default://表达式的值与之前的值都不相等时执行的代码break;在switch语句中,表达式的值将与每个case后的值进行比较,如果相等,相应的代码块将被执行,使用break语句可以使程序跳出switch 语句。
二、分支结构的应用在实验4中,我们可以结合具体问题来设计分支结构程序。
以下是一个示例:问题:根据学生的成绩判断其等级并输出。
解决方法:1.输入学生的成绩。
2. 使用if-else if-else语句判断成绩所属的等级,并输出。
具体实现如下:#include <iostream>int mai//输入学生的成绩int score;std::cout << "请输入学生的成绩:";std::cin >> score;//判断成绩所属等级并输出if (score >= 90)std::cout << "成绩等级为A" << std::endl;} else if (score >= 80)std::cout << "成绩等级为B" << std::endl;} else if (score >= 70)std::cout << "成绩等级为C" << std::endl;} else if (score >= 60)std::cout << "成绩等级为D" << std::endl;} elsestd::cout << "成绩等级为E" << std::endl;}return 0;在上述代码中,我们通过if-else if-else语句根据学生的成绩判断其等级,并输出相应的结果。
编译原理作业集-第七章(精选.)
编译原理作业集-第七章(精选.)第七章语义分析和中间代码产⽣本章要点1. 中间语⾔,各种常见中间语⾔形式;2. 说明语句、赋值语句、布尔表达式、控制语句等的翻译;3. 过程调⽤的处理;4. 类型检查;本章⽬标掌握和理解中间语⾔,各种常见中间语⾔形式;各种语句到中间语⾔的翻译;以及类型检查等内容。
本章重点1.中间代码的⼏种形式,它们之间的相互转换:四元式、三元式、逆波兰表⽰;3.赋值语句、算术表达式、布尔表达式的翻译及其中间代码格式;4.各种控制流语句的翻译及其中间代码格式;5.过程调⽤的中间代码格式;6.类型检查;本章难点1. 各种语句的翻译;2. 类型系统和类型检查;作业题⼀、单项选择题:1. 布尔表达式计算时可以采⽤某种优化措施,⽐如A and B⽤if-then-else可解释为_______。
a. if A then true else B;b. if A then B else false;c. if A then false else true;d. if A then true else false;2. 为了便于优化处理,三地址代码可以表⽰成________。
a. 三元式b. 四元式c. 后缀式d. 间接三元式3. 使⽤三元式是为了________:a. 便于代码优化处理b. 避免把临时变量填⼊符号表c. 节省存储代码的空间d. 提⾼访问代码的速度4. 表达式-a+b*(-c+d)的逆波兰式是________。
a. ab+-cd+-*;b. a-b+c-d+*;c. a-b+c-d+*;d. a-bc-d+*+;5. 赋值语句x:=-(a+b)/(c-d)-(a+b*c)的逆波兰式表⽰是_______。
a. xab+cd-/-bc*a+-:=;a. xab+/cd-bc*a+--:=;a. xab+-cd-/abc*+-:=;a. xab+cd-/abc*+--:=;6. 在⼀棵语法树中结点的继承属性和综合属性之间的相互依赖关系可以由________来描述。
单片机c51程序结构中的4种选择语句
单片机c51程序结构中的4种选择语句单片机C51程序结构中的4种选择语句包括if语句、if-else语句、switch语句和三目运算符。
下面将分别对这四种选择语句进行详细介绍。
一、if语句if语句是单片机程序中最常用的选择语句之一,用于根据条件的真假来执行不同的代码块。
语法结构如下:```cif (条件){// 条件为真时执行的代码}```其中,条件可以是任意的逻辑表达式,当条件为真时,if语句后面的代码块将会被执行;当条件为假时,if语句后面的代码块将被跳过。
例如,下面的代码示例中,通过if语句判断变量x的值是否大于10,若成立则执行打印语句:```cif (x > 10){printf("x大于10");}二、if-else语句if-else语句是在if语句的基础上增加了“否则”的情况,用于在条件为真和条件为假时执行不同的代码块。
语法结构如下:```cif (条件){// 条件为真时执行的代码} else {// 条件为假时执行的代码}```当条件为真时,if语句后面的代码块将会被执行;当条件为假时,else语句后面的代码块将会被执行。
例如,下面的代码示例中,通过if-else语句判断变量x的值是否大于10,若成立则执行打印语句,否则执行另外一个打印语句:```cif (x > 10){printf("x大于10");} else {printf("x小于等于10");}三、switch语句switch语句用于根据不同的条件值执行不同的代码块,可以避免使用大量的if-else语句。
语法结构如下:```cswitch (表达式){case 值1:// 当表达式的值等于值1时执行的代码break;case 值2:// 当表达式的值等于值2时执行的代码break;// 可以添加更多的casedefault:// 当表达式的值不等于任何一个case时执行的代码break;}```switch语句首先根据表达式的值与每个case后面的值进行比较,当找到与表达式值相等的case时,执行该case后面的代码,并使用break语句跳出switch语句;若表达式的值不等于任何一个case时,执行default后面的代码。
DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)
附件1:学号:0120910340525课程设计题目DO-WHILE(简单优先法、输出三地址表示)学院计算机科学与技术专业计算机科学与技术班级0905姓名明正超指导教师杨克俭2012 年 1 月 3 日课程设计任务书学生姓名:明正超专业班级:计算机0905班指导教师:杨克俭工作单位:计算机科学与技术学院题目: DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。
时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年 11月23日系主任(或责任教师)签名: 2011年 11月 23日(一)系统描述根据所学编译原理有关词法分析,语法分析,语义分析有关规则,对DO_WHILE循环语句的翻译程序进行设计,使用高级语言或者伪代码形式,进行编写,其中要求使用简单优先法法并在程序的最终结果中显示出表达式的三地址形式。
编译原理——精选推荐
(7)《编译原理》各章重点习题第二章:2.1:试构造生成语言L={a n b n c i|n≥1, i ≥0}的文法解:2.2:已知语言L={a n bb n| n ≥1}, 写出产生L的文法。
2.3:已知文法G=({A,B,C},{a,b,c},A,P)其中产生式P由以下组成:A →abc A →aBbcBb→bB Bc →CbccbC →Cb aC →aaBaC →aa问:此文法表式的语言是什么?2.4请给出描述语言={a2m+1 b m+1 | m>=0}∪{a2m b m+2| m>=0}的文法2.5已知文法G[S]为:S→dABA→aA|aB→Bb |εG[S]产生的语言是什么?G[S]能否改写为等价的正则文法?2.6:试写一文法,使其描述的语言L(G) 是能被5整除的整数集合。
2.7:已知语言L={x | x∈{a,b,c}*,且x重复排列是对称的(aabcbaa,aabbaa,等)写出该语言的文法。
第三章3.1写出能被5整除的十进制整数的文法及正规表达式。
3.2写一个文法,使其语言是奇数集,且每个奇数不以0开头。
3.3:已知有限自动机如图(1)以上状态转换图表示的语言有什么特征?(2)写出其正规式与正规文法.(3)构造识别该语言的确定有限自动机DFA.3.4请构造与正规式R=(a*b)*ba(a|b)*等价的状态最少的DFA(确定有限自动机)3.5设字符集∑={ a, b } ,请写出不以a开头的但以aa结尾的字符串集合的正规表达式,并构造与之等价的状态最少的DFA。
第四章4.1试构造与下列文法G[S]等价的无左递归文法。
G[S]: S→Sa|Nb|c (1)N →Sd|Ne|f4.2:文法G的规则集为;P →begin d : X endX →d : X | sYY→: sY | e做出该文法LL(1)分析表。
4.3 设有以下文法:G[S]: S→eEfGh | gE→FSG | hF→SEc | cG | εG→Sh |ε(1)求出该文法每一个非终结符的FOLLOW集。
c++中if else语句的注意事项
C++中的if else语句是程序设计中常用的控制语句,它能够根据条件的真假执行不同的代码块。
虽然if else语句看起来简单,但在使用过程中却有很多需要注意的地方,下面将就C++中if else语句的注意事项进行探讨。
1. 检查条件表达式的类型在使用if else语句时,需要确保条件表达式的类型是布尔类型。
C++中只有0被视为false,其他任何非零值都被视为true。
要小心不要混淆条件表达式和其他类型表达式,以免造成逻辑错误。
2. 注意花括号的使用在if else语句中,如果只有一条语句需要执行,可以省略花括号。
但是,为了代码的可读性和防止出错的可能性,建议在if else语句中始终使用花括号。
这样可以避免由于不小心缺少花括号而导致逻辑错误,同时也方便后续代码的维护和修改。
3. 考虑条件嵌套的情况在实际的开发中,经常会遇到多个条件需要判断的情况,这时就需要使用条件嵌套。
在使用条件嵌套时,要特别注意各个条件的先后顺序以及可能的逻辑冲突。
要尽量避免过多的条件嵌套,可以通过重构代码或者使用switch语句来简化逻辑。
4. 避免if else连续出现的情况在某些情况下,可能会出现多个if else语句连续出现的情况。
虽然这样做不会造成语法错误,但会让代码变得杂乱不清,降低代码的可读性和可维护性。
在这种情况下,可以使用逻辑运算符来合并条件,或者通过其他方式来重构代码,使之更加简洁明了。
5. 考虑if else的性能影响在涉及大量数据处理的程序中,if else语句可能会对程序的性能产生影响。
因为if else语句需要不断地进行条件判断,所以在性能要求较高的场景中,考虑使用其他更高效的控制语句或者算法,可以提高程序的运行效率。
6. 注意if else语句与其他控制语句的配合使用在实际的程序设计中,if else语句往往需要与其他控制语句(如循环语句、switch语句)配合使用。
在这种情况下,需要特别注意各种控制语句之间的逻辑关系,以及它们的执行顺序,避免出现意外的结果。
(完整word版)FOR循环语句的翻译程序设计(LL(1)法、输出三地址)
课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: FOR循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。
时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名:年月日系主任(或责任教师)签名:年月日FOR循环语句的翻译程序设计——LL(1)法、输出三地址1.系统描述1.1问题描述用LL(1)法设计、编制、调试一个FOR(表达式1;表达式2;表达式3)〈赋值语句〉的语法及语义分析程序,输出三地址代码。
1.2功能描述(1)能对for循环语句做词法分析,并将其中的某些语句做预处理,如i++转换为i=i+1等。
(2)能依据给定的LL(1)文法判断输入串是否符合LL(1)文法(3)给出输入串的LL(1)分析过程(4)完成对语句中控制变量赋值语句,控制条件语句以及控制变量变换语句的翻译(5)完成对赋值语句包括复杂语句的翻译(6)能够对三个表达式缺少一个或多个的情况下进行翻译(7)用翻译后的语句以三地址代码的中间代码形式正确的表达for循环的执行流程。
编译原理课程设计(if-else条件语句翻译三地址简单优先法) (1)
课程设计任务书题目: 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分,共20分)1.编译程序是对高级语言程序的解释执行。
(×)2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√)4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√)7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(×)10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.()单词的种别编码B.()单词在符号表中的位置C.()单词的种别编码和自身值D.()单词自身值2.正规式M1和M2等价是指_____。
A.()M1和M2的状态数相等B.()M1和M2的有向边条数相等C.()M1和M2所识别的语言集相等D.()M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.()xyx B.()(xyx)*C.()xnyxn(n≥0)D.()x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.()最左推导和最右推导对应的语法树必定相同B.()最左推导和最右推导对应的语法树可能不同C.()最左推导和最右推导必定相同D.()可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
A.()源程序B.()目标语言C.()编译方法D.()以上三项都是6.四元式之间的联系是通过_____实现的。
编译原理课程设计报告-简单文法的编译器的设计与实现
提供全套毕业论文,各专业都有课程设计报告设计题目:简单文法的编译器的设计与实现班级:计算机1206组长学号:20123966组长姓名:指导教师:设计时间:2014年12月摘要编译原理是计算机科学与技术专业一门重要的专业课, 它具有很强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作原理以及编译程序各组成部分的设计原理和实现技术,在计算机本科教学中占有十分重要的地位。
计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。
编译技术是计算机科学中发展得最迅速、最成熟的一个分支,它集中体现了计算机发展的成果与精华。
本课设是词法分析、语法分析、语义分析的综合,外加上扩展任务中间代码的优化和目标代码的生成,主要是锻炼学生的逻辑思维能力,进一步理解编译原理的方法和步骤。
关键词:编译原理,前端,目标代码,后端目录摘要 (3)1. 概述 (6)2. 课程设计任务及要求 (8)2.1 设计任务 (8)2.2 设计要求 (9)3. 算法及数据结构 (10)3.1算法的总体思想 (10)3.2 词法分析器模块 (11)3.2.1 功能 (11)3.2.2 数据结构 (11)3.2.3 算法 (12)3.3 语法分析器模块 (13)3.3.1功能 (13)3.3.2 数据结构 (13)3.3.3算法 (14)3.4 中间代码产生器模块 (24)3.4.1 功能 (24)3.4.2 数据结构 (24)3.4.3 算法 (25)3.5 优化器模块 (27)3.5.1 功能 (27)3.5.2 数据结构 (27)3.5.3 算法 (28)3.6 目标代码生成器模块 (30)3.6.1功能 (30)3.6.2 数据结构 (30)3.6.3 算法 (31)4. 程序设计与实现 (32)4.1 程序流程图 (32)4.2 程序说明 (33)4.3 实验结果 (35)5. 结论 (42)6. 参考文献 (43)7. 收获、体会和建议 (44)1 概述在计算机上执行一个高级语言程序一般要分为两步;第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。
matlab中if else语句的用法
matlab中if else语句的用法在MATLAB中,if-else语句是用来进行条件判断的重要工具。
在程序中,if-else语句可以根据程序执行过程中所给定的条件,决定是否执行某段代码。
if-else语句在MATLAB中非常灵活,可以处理各种复杂的条件,因此在MATLAB程序设计中使用if-else语句是非常常见的。
if-else语句的基本形式是:if 条件1执行代码块1elseif 条件2执行代码块2else执行代码块3end其中,条件1是最优先考虑的条件,如果条件1成立,则执行代码块1;如果条件1不成立,则根据条件2进行判断,如果条件2成立,则执行代码块2,否则执行代码块3。
if-else语句的条件可以是任何表达式,包括比较运算符、逻辑运算符、函数、变量等等。
判断条件返回的结果必须是逻辑值(true或false)。
在使用if-else语句时,要注意条件表达式中所使用的操作符和数据类型,以避免出现错误。
if-else语句在MATLAB中的应用非常广泛,例如:1. 判断变量的值是否符合要求:x = input('请输入一个数: ');if x > 100disp('输入的数大于100!');elseif x < 0disp('输入的数小于0!');elseif x == 0disp('输入的数等于0!');elsedisp('输入的数符合要求!');end2. 处理文件读写操作:3. 判断输入的字符是否是数字:4. 统计数组中特定元素的个数:a = [1 2 2 2 3 4 4 5 5 6];x = 2;count = 0;for i = 1:length(a)if a(i) == xcount = count + 1;endenddisp(['数组中包含 ' num2str(x) ' 的个数为 ' num2str(count)]);总之,if-else语句在MATLAB中的应用非常广泛,是程序设计中非常重要的一部分。
python多重判断语句
python多重判断语句Python多重判断语句是编程中非常重要的一部分。
它让程序员可以根据不同的情况执行不同的代码块,实现更加灵活的程序逻辑。
在Python中,多重判断语句的主要形式有if语句、if-else语句、if-elif-else语句等。
if语句是最简单的判断语句,它的逻辑如下:```pythonif 条件:# 条件满足时执行的代码块```其中,条件可以是任意的逻辑表达式,例如:```pythonx = 5if x > 0:print("x是正数")```在这个例子中,条件为x > 0,如果满足条件,程序就会执行print语句,输出“x是正数”。
if-else语句比if语句更加复杂,它的逻辑如下:```pythonif 条件:# 条件满足时执行的代码块else:# 条件不满足时执行的代码块```在这个语句中,如果if的条件不满足,程序会执行else块中的代码。
if-elif-else语句则更加复杂,它允许程序员根据多个条件执行不同的代码块,其逻辑如下:```pythonif 条件1:# 条件1满足时执行的代码块elif 条件2:# 条件2满足时执行的代码块else:# 所有条件都不满足时执行的代码块```在这个语句中,如果条件1不满足则会判断条件2,如果条件2满足则执行条件2的代码块,否则执行else块中的语句。
综上所述,多重判断语句是Python编程中不可或缺的一部分。
程序员可以根据不同的条件执行不同的代码块,实现更加灵活的程序逻辑。
以下是刚刚所述内容的代码实现,并按段落进行列表划分,总长度大概为700字左右:首先,我们来介绍Python中最简单的判断语句-if语句。
if语句的逻辑很简单,只有当条件满足时才会执行其中的代码块。
```pythona = 10b = 5if a > b:print('a大于b')```在这个例子中,if语句的条件为a > b,程序会执行print语句,输出“a 大于b”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:0120910340205编译课程设计题目IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)学院计算机科学与技术学院专业计算机科学与技术专业班级计算机科学与技术0902班姓名指导教师郭羽成2012 年 1 月 5 日课程设计任务书学生姓名:专业班级:计算机0902班指导教师:郭羽成工作单位:计算机科学与技术学院题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。
时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年 11月 18日系主任(或责任教师)签名: 2011年 11月 18日一.系统描述I F-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)对条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉(1)写出符合语法分析方法要求的文法和属性文法描述。
(2)给出语法分析方法的思想及分析表设计。
(3)给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
二.文法及属性文法的描述if then else文法的产生式为:①S→if E then B else B②E→id1 A id2 | id1③A→< | > | ==④B→id1=num根据条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉,描述相应的文法,其中共有4个非终结符(S,E,A,B),终结符10个(if,then,else,id1,id2,<,>,==,=,num)。
E为布尔表达式,B为赋值语句。
三.语法分析方法描述及语法分析表设计首先根据已知优先文法构造相应的优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:1)将输入符号串a1a2……an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性>下一个待输入符号aj时为止。
2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到 ak-1<ak,为止。
3)由句柄ak……ai在文法的产生式中查找右部为ak……ai的产生式,若找到则用相应左部代替句柄,若找不到则为出错,这是可断定输入串不是该文法的句子。
4)重复上述的三个步骤直到归约完输入符号串,栈中只剩文法的开始符号为止。
按照优先关系矩阵对输入串if x>y then a=2 else u=9 的分析过程四.中间代码形式的描述及中间代码序列的结构设计4.1中间代码形式描述此设计要求使用的是三地址的中间代码,三地址代码是由下面一般形式构成的语句序列: x:=y op z;其中x,y,z为名字,常数或编译时产生的临时变量;op代表运算符号如标点,浮点运算符号等等。
每个语句的右边只能有一个运算符。
表达式x + y * z翻译成的三地址语句序列是:t1 := y * zt2 := 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 := y4.2中间代码序列的结构设计在本程序的文法中,中间代码的三地址码为:L1:if id1 A id2 goto L2goto L3L2:id1=numgoto LnextL3:id1=numgoto LnextLnext:其中id1,id2在具体的程序运行中用输入的单词符号所确定,A代表<,>,==三种符号,num 代表数字。
五. 编译系统的概要设计在词法分析部分,应用函数word()来识别标识符和关键字,其中用ASCII码来识别字母,如遇到不合法的字符就会报错。
在语法分析部分,用简单优先法完成此次文法分析的关键在于构造该文法的简单优先关系矩阵,以及如何运用该矩阵完成移入和归约的过程,从而完成整个文法的分析。
求非终结符号的FIRST集和LAST集,利用FIRST集和LAST集求出优先关系,最终构造出简单优先关系矩阵。
在整个简单优先关系矩阵构造成功后,我们还应该构造一个堆栈,用来存放符号;并将符号栈中的栈顶元素与输入串队列的队头元素进行比较,然后查找简单优先关系矩阵得到相应的优先关系,从而完成分析表中所要求完成的动作,如果栈中的栈顶元素比输入串队列的队头元素优先关系为<或=则将输入串队列的队头元素移入栈中,若为>则要将栈中的符号进行归约,这时要找到栈中的句柄归约,若找不到句柄进行归约则输入的符号串不是该文法的句子。
找到句柄归约完之后再重复上面的步骤,最后符号栈中最后只剩该文法的开始符号,则整个过程分析成功,否则则分析失败或出现错误。
根据栈的归约操作通过cout语句将三地址输出。
六.源代码#define N 100#include<iostream>#include<string.h>#include<stdio.h>using namespace std;static char a[N]; /*存放输入的语句*/static char str[N]; /*存放构成单词符号的字符串*/static int b[N];static char copyy[N][N];static char ch;static int i=0;static int j=0;static int m;static int n;int p;int h[14][14];int l[14][14];struct list //定义结点{int data;list *next;};class stack//定义栈类{private:list *ptr;public:stack(){ ptr=NULL;}void push(int i);int pop();};void stack::push(int x) { list *q=new list;q->data=x;q->next=ptr;ptr=q;}int stack:: pop(){list *p;int value;value=ptr->data;p=ptr;ptr=ptr->next;return value;}//***************词法分析程序***********************int word(){if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122)){/* 识别标识符和关键字*/ch=a[i];str[j]=ch;i++;j++;while((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122 )||(a[i]>=48&&a[i]<=57)) {ch=a[i];str[j]=ch;i++;j++;}if(a[i]!=' ')i--;/*使i回调*/if(strcmp(str,"if")==0||strcmp(str,"IF")==0)return(2);else if(strcmp(str,"then")==0||strcmp(str,"THEN")==0)return(3);else if(strcmp(str,"else")==0||strcmp(str,"ELSE")==0)return(4);else if(strcmp(str,"AND")==0||strcmp(str,"and")==0)else if(strcmp(str,"or")==0||strcmp(str,"OR")==0) return(6);else if(strcmp(str,"not")==0||strcmp(str,"NOT")==0) return(7);else return(1);}else if(a[i]>=48&&a[i]<=57){/*识别常数*/ch=a[i];str[j]=ch;i++;j++;while((a[i]>=48&&a[i]<=57)&&i<N){ch=a[i];str[j]=ch;i++;j++;}if(a[i]!=' ')i--;return(8);}else if(a[i]=='<'){ch=a[i];str[j]=ch;i++;j++;{ch=a[i];str[j]=ch; return(10);}else{ i--;return(9);}}else if(a[i]=='>') {ch=a[i];str[j]=ch;i++;j++;if(a[i]=='=') {ch=a[i];str[j]=ch; return(12);}else{ i--;return(11);}}else if(a[i]=='!') {ch=a[i];str[j]=ch;i++;j++;if(a[i]=='=') {ch=a[i];str[j]=ch; return(13);}else{ i--;return(-1);}}else if(a[i]=='=') {ch=a[i];str[j]=ch;i++;j++;if(a[i]=='=') {ch=a[i];str[j]=ch; return(15);}else{ i--;return(14);}}else if(a[i]=='(') {ch=a[i];str[j]=ch;return(17);}else if(a[i]==')') {ch=a[i];str[j]=ch;return(18);}else if(a[i]==' ') {return(16);}elsereturn (-1);}int bn(){ int k=0;while(k<strlen(a)) {b[n]=word();if(b[n]==16){ i++;k=i;n--;}else if(b[n]!=-1) {i++;k=i;strcpy(copyy[n],str);cout<<str<<"<"<<b[n]<<">"<<" ";}else{cout<<endl;cout<<"error!词法分析器分析到第"<<n+1<<"个单词符号这里发现错误!"<<endl; return (-1);break;}n++;for(m=0;m<N;m++)str[m]='\0';j=0;}}stack A,B;void inserth(int i,int j){if(!h[i][j]){h[i][j]=1;A.push(h[i][j]);}}void insertl(int i,int j){if(!l[i][j]){l[i][j]=1;B.push(l[i][j]);}}int sentence_judge() {if(b[0]==2){if(b[1]==1){if(b[2]==3){if(b[3]==1){if(b[4]==14){if(b[5]==8){if(b[6]==4){if(b[7]==1){if(b[8]==14){if(b[9]==8)return (1);elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}else if((b[2]==9)||(b[2]==11)||(b[2]==15)) {if(b[3]==1){if(b[4]==3){if(b[5]==1){if(b[6]==14){if(b[7]==8){if(b[8]==4){if(b[9]==1) {if(b[10]==14) {if(b[11]==8) return (2); elsereturn (-1); }elsereturn (-1); }elsereturn (-1); }elsereturn (-1); }elsereturn (-1); }elsereturn (-1); }elsereturn (-1); }elsereturn (-1);}elsereturn (-1);}elsereturn (-1);}elsereturn(-1);}elsereturn(-1);}void sentence(){char c[][N]={"S→if E then B else B","E→id1 A id2|id1","A→<|>|==","B→id1=num"}; char d[][N]={"S","E","A","B","if","then","else","id1","id2","<",">","==","=","num"};//非终结符4个,终结符10个char e[][N][N]={{"S","→","if","E","then","B","else","id1","=","num","#"},{"E","→","id1","A", "id2","|","id1","#"},{"A","→","<","|",">","|","==","#"},{"B","→","id1","=","num","#"}};int f[N][N];int g[N][N];//存放关系,1代表=关系,2代表<关系,3代表>关系int k,n;i=0;g[1][5]=1;g[2][8]=1;g[3][6]=1;g[4][2]=1;g[4][7]=2;g[5][3]=1;g[5][7]=2;g[6][3]=1;g[6][7]=2;g[7][2]=1;g[7][5]=3;g[7][9]=2;g[7][10]=2;g[7][11]=2;g[7][12]=1;g[8][5]=3;g[9][8]=3;g[10][8]=3;g[11][8]=3;g[11][13]=1;g[13][6]=3;cout<<"条件语句的文法如下:"<<endl; for(i=0;i<4;i++)cout<<c[i]<<endl;for(j=0;j<4;j++){for(i=0;i<4;i++){ if(strcmp(e[j][0],d[i])==0)for(k=0;k<14;k++)if(strcmp(e[j][2],d[k])==0)inserth(i,k);}}for(j=0;j<4;j++){for(k=0;k<8;k++){if(strcmp(e[j][k],"|")==0){for(i=0;i<4;i++){if(strcmp(e[j][0],d[i])==0)for(m=0;m<14;m++)if(strcmp(e[j][k+1],d[m])==0)inserth(i,k+1);}}}}for(j=0;j<4;j++){n=0;while(strcmp(e[j][n],"#")!=0) n++;for(i=0;i<4;i++){ if(strcmp(e[j][0],d[i])==0) for(k=0;k<14;k++){if(strcmp(e[j][n-1],d[k])==0) insertl(i,k);}}}for(j=0;j<4;j++){for(k=0;k<8;k++){if(strcmp(e[j][k],"|")==0) {for(i=0;i<4;i++){if(strcmp(e[j][0],d[i])==0) for(m=0;m<14;m++)if(strcmp(e[j][k-1],d[m])==0)insertl(i,k-1);}}}}for(j=0;j<4;j++){for(i=2;i<10;i++){if(strcmp(e[j][i],"|")!=0&&strcmp(e[j][i+1],"|")!=0&&strcmp(e[j][i+1],"#")) {for(k=0;k<14;k++)if(strcmp(e[j][i],d[k])==0)f[j][k]=1;}}}if(sentence_judge()!=-1) //sentence_judge()进行规约cout<<"输入的句子符合语法要求!";elsecout<<"输入的句子不符合语法要求!";}void code(){if(sentence_judge()==1){cout<<"L1: "<<"if "<<copyy[1]<<" goto L2\n";cout<<" goto L3\n";cout<<"L2: "<<copyy[3]<<copyy[4]<<copyy[5]<<"\n";cout<<" goto Lnext\n"<<endl;cout<<"L3: "<<copyy[7]<<copyy[8]<<copyy[9]<<"\n";cout<<" goto Lnext\n"<<endl;cout<<"Lnext:exit\n"<<endl;}elseif(sentence_judge()==2){cout<<"L1: if "<<copyy[1]<<copyy[2]<<copyy[3]<<" goto L2\n"; cout<<" goto L3\n"<<endl;cout<<"L2: "<<copyy[5]<<copyy[6]<<copyy[7]<<"\n";cout<<" goto Lnext\n"<<endl;cout<<"L3: "<<copyy[9]<<copyy[10]<<copyy[11]<<"\n";cout<<" goto Lnext\n"<<endl;cout<<"Lnext: \n "<<endl;}}int main(){int value;cout<<"请输入条件语句:"<<endl;gets(a); /*输入一个句子*/cout<<endl;cout<<"词法分析分析出的单词及其对应的编码如下:"<<endl; value=bn();cout<<endl<<endl;if(value!=-1){sentence();}cout<<endl;if(sentence_judge()!=-1){cout<<"进行语义分析输出的三地址码如下:"<<endl; code();}int c;cin>>c;return 0;}七.软件的测试方法和测试结果运行结果:八.研制报告本设计收获与体会:在本次课程设计中,通过查阅一些资料和在同学的帮助下完成。