武汉理工大学编译原理实验报告

武汉理工大学编译原理实验报告
武汉理工大学编译原理实验报告

武汉理工大学

学生实验报告书

实验课程名称编译原理课程实验

开课学院计算机科学与技术学院指导老师姓名饶文碧

学生姓名徐强国

学生专业班级软件 1602

2018 —2019 学年第1 学期

实验课程名称:编译原理

依次输入关键字,自定义标识符 BBBJKJL KJKJ4234,整数 3432,特

殊符号和其他符号:. {} []。

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)输出为:

三、实验小结、建议及体会

通过这次的词法分析实验,我遇到了不少问题。对于输入字符串的直接处理,首先是分类情况的不完整(起初忽略了对关键字的判断),造成输出结果与预想有很大偏差。总结下:作为编译的第一步,词法分析将高级语言一步步分解,然后转化为自己的语言,这是一个严谨有十分有趣的过程。

核心代码:

struct word //存储关键字,特殊符号

{

int code;

char T[max];

};

word important[5]; //结构体变量存储关键字

word num; //结构体变量存储数字

word identifier; //结构体变量存储标识符

word special_symbol[7]; //结构体变量存储特殊符号

int function(word* a, word b, word c, word* d, char* input, int k)

{

char getword[max];

int j = 0;

if (input[j] == ' ') // 判断空格

{

k = k + j + 1;

function(a, b, c, d, input + j + 1, k);

}

else if (input[j] == '=' || input[j] == '+' || input[j] == ',' || input[j] == '(' || input[j] == ')') //判断特殊符号

{

if (input[j] == '*')

{

getword[j] = input[j];

j = j + 1;

if (input[j] == '*')

{

} else { }

else

{

}

getword[j] = input[j];

cout << '(' << d[3].code << ',' << d[3].T << ')' << endl;

j = j - 1;

cout << '(' << d[2].code << ',' << d[2].T << ')' << endl;

getword[j] = input[j];

for (int i = 0; i < 7; i++)

{

if (i == 3)

continue;

else

if (d[i].T[0] == getword[0])

{

cout << '(' << d[i].code << ',' << d[i].T << ')' << endl;

break;

}

}

}

k = k + j + 1;

function(a, b, c, d, input + j + 1, k);

}

else if (input[j] >= '0' && input[j] <= '9') //判断数字

{

getword[j] = input[j];

j = j + 1;

while (input[j] >= '0' && input[j] <= '9')

{

getword[j] = input[j];

j = j + 1;

}

j = j - 1;

getword[j + 1] = '\0';

cout << "(" << b.code << ',' << getword << ')' << endl;

k = k + j + 1;

function(a, b, c, d, input + j + 1, k);

}

else if (input[j] >= 'A' && input[j] <= 'Z' || input[j] >= 'a' && input[j] <= 'z') //判断字符{

getword[j] = input[j];

j = j + 1;

while (input[j] >= 'A' && input[j] <= 'Z' || input[j] >= 'a'&&input[j] <= 'z' || input[j] >= '0' && input[j] <= '9')

{

getword[j] = input[j];

j = j + 1;

}

j = j - 1;

getword[j + 1] = '\0';

if (!strncmp(getword, a[0].T, 3))

cout << '(' << a[0].code << ',' << a[0].T << ')' << endl;

else if (!strncmp(getword, a[1].T, 2))

cout << '(' << a[1].code << "," << a[1].T << ')' << endl;

else if (!strncmp(getword, a[2].T, 2))

cout << '(' << a[2].code << "," << a[2].T << ')' << endl;

else if (!strncmp(getword, a[3].T, 4))

cout << '(' << a[3].code << "," << a[3].T << ')' << endl;

else if (!strncmp(getword, a[4].T, 3))

cout << '(' << a[4].code << "," << a[4].T << ')' << endl;

else

cout << '(' << c.code << ',' << getword << ')' << endl;

k = k + j + 1; function(a, b, c, d, input + j + 1, k);

}

else if (input[j] == '\0') //判断是否为结束符

return 0;

else //出错处理

{

cout << "第" << k + 1 << "个字符出错" << endl;

k = k + j + 1;

function(a, b, c, d, input + j + 1, k);

}

}

第二部分:实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

算法流程截图:

输入一个正确句子:i+i*i# 输

入一个错误句子:i*i*(i+#

输入一个无#结束的错误句子:i*i*i

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)正确结束:

错误句子:

无#:

三、实验小结、建议及体会

通过本次实验,我收获了很多,首先对 LL(1)文法分析的原理和过程理解更进一步巩固,算是做到了学以致用。在做实验的过程中,我发现自己经常忽略对于细节的处理,从而经常导致我要修改一些隐藏的低级错误才能正确运行程序,如中英文问题还有误删中括号

等。在今后的学习中,我会注意改正不足,稳步向前。

核心代码:

E(); //从首个推导式E 开始if ((a[_advance] == '#'))

_export << "The senetence is right,success!\n";

else

_export << "No the signal of #,fail\n";

void E() //功能识别函数

{

_export << "E->TE'\n";

T();

E1();

}

void E1()

{

if (a[_advance] == '+')

{

}

else } _export << "E'->+TE\n"; //输出使用E'规则

_advance++; //如果是“+”,读取下一字符T(); //调用右部非终结符规则

E1();

_export << "E'->ε\n";

void T()

{

_export << "T->FT'\n";

F();

T1();

}

void T1()

{

if (a[_advance] == '*')

{

}

else } _export << "T'->*FT'\n"; _advance++;

F();

T1();

_export << "T'->ε\n";

void F()

{

if (a[_advance] == 'i')

{

_export << "F->i\n";

_advance++;

}

else if (a[_advance] == '(')

{

_advance++;

E();

if (a[_advance] == ')')

{

}

else

{

} } _export << "F->(E)\n";

_advance++;

_export << "\n()nis not matching,error!"; exit(0);

else{

_export << "\n() is not matching,error!\n";

exit(0);

}

}

第二部分:实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

算法流程:

输入为一个标准的算术表达式,输出为四元式,按行区分,如输入:

Y=a+b*(c-d*e/f+g*(h-i*x))

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

通过栈和优先级的判断可以很好地实现翻译表达式,产生四元式。

三、实验小结、建议及体会

通过本次实验我完成了算术表达式到四元式的生成,掌握了解和语法分析实现翻译的方案和思路。实验过程并不是一帆风顺的,特别是在涉及左右括号的处理和优先级问题,应分清先后:括号优先,一般运算乘除优先,之后加减。

核心代码:

int n = 301; //表示每个产生的临时变量(两元运算产生)

int ss = 0; //式子前的标号

void zh(int n) //表示字符输出

{

if (n >= 300)

cout << "T" << n - 300;

else

cout << char(n);

}

//识别符号和优先级

int p(char n)

{

if (n == '=')

return 0;

else if (n == ')')

return TEN;

else if (n == '+' || n == '-')

return TWENTY;

else if (n == '*' || n == '/')

return THIRTY;

else if (n == '(')

return FORTY;

else

return -1;

}

int main()

{

cout << "输入算术表达式" << endl;

string s;

cin >> s;

char a[100]; //符号

int b[100];

int atop = 0, btop = 0;

for (int i = 0; i < s.length(); i++)

{

if (p(s[i]) == -1) //数字直接添加b[btop++] = s[i];

else if (atop > 1)

{

if (s[i] == '('&&s[i + 1] == '-') //处理(-a)情况

{

cout << "(" << ss << ") (" << "uminus, ";

zh(s[i + 2]);

cout << ", _, " << "T" << n - 300 << ")" << endl;

i = i + 3;

b[btop++] = n;

n++;

ss++;

}

else if (s[i] == '('&&s[i + 1] != '-')

{

a[atop++] = s[i];

}

else if (s[i] == ')'&&p(s[i]) <= p(a[atop - 1])) //执行完括号内的运算

{

while (a[atop - 1] != '(')

{

cout << "(" << ss << ") (" << a[--atop] << ", ";

zh(b[btop - 2]);

cout << ", ";

zh(b[btop - 1]);

cout << ", " << "T" << n - 300 << ")" << endl;

btop = btop - 2;

b[btop++] = n;

n++;

ss++;

}

if (a[atop - 1] == '(')

--atop;

}

else if (s[i] != ')'&&p(s[i]) <= p(a[atop - 1])) //运算符优先级比较处理

{

while (p(s[i]) <= p(a[atop - 1]) && a[atop - 1] != '=' && a[atop - 1] != '(')

{

cout << "(" << ss << ") (" << a[--atop] << ", ";

zh(b[btop - 2]);

cout << ", ";

zh(b[btop - 1]);

cout << ", " << "T" << n - 300 << ")" << endl;

btop = btop - 2;

b[btop++] = n;

n++;

ss++;

}

}

else } a[atop++] = s[i]; a[atop++] = s[i];

else

a[atop++] = s[i];

}

//处理括号内->外运算

if (s[s.length() - 1] == ')')

{

while (p(s[s.length() - 1]) <= p(a[atop - 1]) && a[atop] != '(') {

cout << "(" << ss << ") (" << a[--atop] << ", ";

zh(b[btop - 2]);

cout << ", ";

zh(b[btop - 1]);

cout << ", " << "T" << n - 300 << ")" << endl;

btop = btop - 2;

b[btop++] = n;

n++;

ss++;

}

if (a[atop - 1] == '(')

--atop;

while (a[atop - 1] != '=')

{

cout << "(" << ss << ") (" << a[--atop] << ", ";

zh(b[btop - 2]);

cout << ", ";

zh(b[btop - 1]);

cout << ", " << "T" << n - 300 << ")" << endl;

btop = btop - 2;

b[btop++] = n;

n++;

ss++;

}

}

//一步+或-或*或除处理

else

{

b[btop++] = s[s.length() - 1];

cout << "(" << ss << ") (" << a[--atop] << ", ";

zh(b[btop - 2]);

cout << ", ";

zh(b[btop - 1]);

cout << ", " << "T" << n - 300 << ")" << endl;

btop = btop - 2;

b[btop++] = n;

n++;

ss++;

}

武汉理工大学-操作系统实验报告

学 生 实 验 报 告 书 实验课程名称 操 作 系 统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 软件工程 2014 — 2015 学年 第 一 学期 学生学号 实验课成绩

实验课程名称:操作系统 实验项目名称Linux键盘命令和vi实验成绩 实验者专业班级组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 掌握Linux系统键盘命令的使用方法。 二、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等) Vi编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi。 1.进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: 例如:$ vi myfile 有一点要注意,在进入vi之后,是处于“命令行模式”,要切换到“插入模式”才能够输入文字。 2. 切换至插入模式编辑文件 在“命令行模式”下按一下字母“i”就可以进入“插入模式”,这时候就可以开始输入文字了。 3. Insert 的切换 处于“插入模式”,就只能一直输入文字,按一下“ESC”键转到”命令行模式”能够删除文字。 4. 退出vi及保存文件 在“命令行模式”下,按一下“:”冒号键进入“Last line mode”,例如: : w myfilename : wq (输入”wq”,存盘并退出vi) : q! (输入q!,不存盘强制退出vi) 三、主要实验工具、仪器设备及耗材 安装Linux系统的计算机一台。

第二部分:实验结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 在整个过程中,最困难的就是记忆整个Vi命令。在查阅资料的情况下,这个问题得到了解决。 二、实验结果描述 1.进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面 图1 vi主界面 2.切换至插入模式编辑文件 在“命令行模式”下按一下字母”i”就可以进入”插入模式”。 3.退出vi及保存文件 在”命令行模式”下,按一下”:”冒号键进入”Last line mode”;输入w filename 将文章以指定的文件名filename保存;输入wq存盘并退出vi。 三、实验小结、建议及体会 这次实验让对Linux操作系统有了初步的了解,我掌握了一些Linux系统常用的命令。

编译原理实验报告

编译原理实验报告 姓名: 学号: 班级: 学院: 南昌大学信息工程学院计算机系 2014年6月

目录 实验一 (3) 实验二 (8) 实验三 (15)

实验1 词法分析程序的设计 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验目的 掌握计算机语言的词法分析程序的开发方法。 二、实验内容 编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。 三、实验要求 1、根据以下的正规式,编制正规文法,画出状态图; 标识符<字母>(<字母>|<数字字符>)* 十进制整数0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 如有余力,则进一步分析八进制和十六进制整数,其正规式如下: 八进制整数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和界符+ - * / > < =<= >=( ) ;{ } 关键字main if then else while do int (可根据需要添加) 2、根据状态图,设计词法分析函数int scan( ),完成以下功能: 1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词, 2)以二元式形式输出单词<单词种类,单词属性> 其中单词种类用整数表示: 0:标识符 1:十进制整数 2:八进制整数 3:十六进制整数 运算符和界符,关键字采用一字一符,不编码 其中单词属性表示如下: 标识符,整数由于采用一类一符,属性用单词表示 运算符和界符,关键字采用一字一符,属性为空 3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境

武汉理工大学网络教育学院2015市场营销学满分答案

单选题 1. 就每一特定市场而言,最佳市场营销组合只能是_____的结果。 (A) 市场细分 (B) 精心策划 (C) 综合平衡 (D) 统筹兼顾 难度:较易分值:2.0 2. 市场营销学作为一门独立的经济管理学科诞生于20世纪的 (A) 美国(B) 日本(C) 中国(D) 欧洲 难度:较易分值:2.0 3. 一部正在畅销的小说被作者、编剧改编成电视连续剧,并投入制作,搬上荧屏,这是信息 的____特征。 (A) 可检索性 (B) 可共享性 (C) 可转换性 (D) 可存储性

难度:较易分值:1.5 4. 运用科学的方法,有目的地收集、整理和分析研究有关市场营销方面的信息,提出解决问 题的建议,供营销人员了解营销环境,发现机会与问题,作为市场预测与营销决策的依据,我们把它称之为 (A) 营销信息系统 (B) 市场调研 (C) 市场预测 (D) 决策支持系统 难度:较易分值:2.0 5. 产品组合的宽度是指产品组合中所拥有_____的数目。 (A) 产品项目 (B) 产品线 (C) 产品种类 (D) 产品品牌 难度:较易分值:2.0 6. 准确地计算产品所提供的全部市场认知价值是_____的关键。 (A) 认知价值定价法

(B) 反向定价法 (C) 需求差异定价法 (D) 成本导向定价法 难度:较易分值:1.5 7. “市场同合化”的理论,主张从______的比较出发适度细分市场。 (A) 成本和收益 (B) 需求的差异性和一致性 (C) 利润和市场占有率 (D) 企业自身与竞争者资源条件 难度:较易分值:2.0 8. 区分战略经营单位的主要依据是多项业务之间是否存在共同的 (A) 经营目标 (B) 经营方针 (C) 经营主线 (D) 经营利益 难度:较易分值:1.5

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

武汉理工大学计算机网络实验报告

学生学号0121210680117 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称《计算机网络》 开课学院计算机科学与技术学院 指导老师姓名周兰采 学生姓名柏扬 学生专业班级软件1201 2013 —2014 学年第二学期

实验课程名称:计算机网络 实验项目名称获取网卡的MAC地址实验成绩 实验者专业班级组别 同组者实验日期 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 实验内容:编程获取以太网适配器的MAC地址。 二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述) 实验原理: 在系统的cmd命令提示符中,我们输入ipconfig/all就可以看到本机上所有的适配器的具体内容如媒体状态、连接特定的DNS后缀、描述、物理地址、DHCP 已启用、自动配置已启用信息。本实验是运用匹配的思想,先通过,在寻找匹配字符串物理地址,找到了就将:后面位置的内容赋值给mac,作为MAC地址,然后再主函数中输出即可。

实验代码如下: package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class SystemTool { /** *@return mac地址 */ public static String getWindowsMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { process = Runtime.getRuntime().exec("ipconfig /all");// windows 下的命令,显示信息中包含有mac地址信息 bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null;

毕业设计指导书-武汉理工大学网络教育学院

毕业设计指导书 (适用:网络学院机械设计工程及自动化专业专升本) 一、毕业设计的目的 毕业设计是机自专业最重要的实践环节之一,学生在学习完《机械制造技术基础》、《机电传动器控制》、《单片机应用系统设计》、《机械制造装备设计》等专业基础课和专业课后所进行的最后一个实践性教学环节,其基本目的是: 1. 熟悉和掌握根据毕业设计课题进行调查研究、收集设计资料的方法和途 径; 2. 综合运用机械设计以及机电控制等各种课程的理论及实践知识,去分析 和解决一般工程项目的技术设计问题,掌握一般机械工程师所必需掌握 的设计方法和技能,并使所学知识得到进一步的学习和应用。 二、毕业设计的内容和要求 毕业设计分两个阶段进行:毕业实习阶段和毕业设计阶段: (一)毕业实习 1.毕业实习目的和要求 学生通过毕业实习实践环节,结合毕业设计课题作实地调查研究,了解国内外与设计课题有关的技术现状,收集毕业设计有关信息和资料, 为毕业设计作准备. 2.实习地点 就近安排到各函授站的厂矿企业或机械研究所实习.如经济条件允许,指导教师可安排学生到外地实习. 3.实习内容和要求 1).学生到生产现场作实际调查研究,了解并收集与毕业设计课题有关的技术信息和资料.学生必须认真做好生产现场实习笔记;尽可能详细地记录与设计课题有关的设备的结构布局、外形尺寸、重要部件的工作原理、结构形状与尺寸,以及设备的主要动力参数和运动参数,如:各电机的型号、功率及转速、主运动速度、进给速度等。这些资料,对毕业设计有重要的参考价值。 2).学生到图书馆收集有关毕业设计的图书资料,了解国内外有关设备的技术资料,并做好读书笔记; 3). 实习期间,学生必须做到一切行动听指挥,自觉遵守实习纪律和实习厂规章制度;切实做到人身安全和设备安全.指导教师应联系安排厂方有关人员对学生进行安全教育。 4).实习结束后,学生必须认真整理生产现场收集的设计资料和读书笔记

武汉理工大学 统计学 学生实验报告书

实验报告

3,在对话框中选择描述统计、选择确定 4,在对话框的输入区域输入试验项目的数据范围A2:A31,在输出区域输入 D3,选择汇总统计,选择确定。 (三)动态数列长期趋势预测 1,进入Excel系统,输入实验项目的有关数据 2、建立直线趋势方程:Yc=a+bt,利用最小平方法计算a和b的参数 3、将参数代入直线趋势方程,Yc=a+bt,预测所需年份的产量 (四)抽样调查区间估计(从一批灯泡中随即抽取40只进行检查,并对该批全部 灯泡的平均使用时间的可能范围) 1、进去Excel系统,输入实验项目的全部数据,输入计算指标、计算公式 2、利用各公式计算相应的指标 3、利用区间估计的方法计算区间估计 五、原始数据记录 (一)制作次数分布图表(直方图) 某班40名学生考试成绩如下(单位:分) 成绩:66 45 99 56 88 99 84 81 76 94 79 77 99 82 65 73 74 77 98 65 60 79 67 66 82 97 59 83 60 78 72 63 89 95 84 79 86 78 98 87 答:首先,打开Excel并新建一个工作簿,输入试验项目的所有数据;然后,点击工具菜单栏的【数据】,并选择【数据分析】;再在对话框中选择【直方图】并点击确定;然后,在对话框的【输入区域】输入试验项目的数据范围(A2:A41),在【接收区域】输入分组的范围(B2:B6),在【输出区域】输入D2,并勾选【累计百分比】和【输出图表】,点击确定。最后得到次数分布图表如下图所示: 图1 在Excel中制作次数分配图表 由上述图表可知,该班学生考试成绩在50分及以下的有1人,50分(不包含50分)到60分(包含60分)之间的有4人,60分(不包含60分)到70分(包含70分)之间的有6人,70分(不包含70分)到80分(包含80分)之间的有11人,80分(不包含80分)到90(包含90分)分之间的有10人,90分以上的有8人。 (二)计算描述统计量(某煤矿6月份的燃煤产量,单位:万吨) 30个产量的原始数据如下: 产量:2010 2200 2400 1965 2010 2025 2042 2050 2080 2101 2103 2130 2152 2193 1100 2230 2280 2282 2300 2338 2342 2345 2361 2382 2390 2424 2450 1560 1980 1900

武汉理工大学网络教育学院大学入学考试复习资料计算机基础 B试卷 2010-6-3 14:30

武汉理工大学网络学院试卷 课程名称:计算机基础专业班级:入学复习题 备注: 学生不得在试题纸上答题(含填空题、选择题等客观题) 一、选择题(本题共40道小题,每小题1分,共40分)从每小题的四个备选答案中,选出—个正确的答案。 1、个人计算机属于__。 A)微型计算机B)小型计算机C)中型计算机D)小巨型计算机 2、下列四项中,不属于多媒体所包括的媒体类型的是__。 A) 图像B) X光C)音频D) 视频 3、下列软件中,属于系统软件的是__。 A)用FORTAN语言编写的计算弹道的程序 B)FORTRAN语言的编译程序 C)交通管理和定位系统 D)计算机集成制造系统 4、CPU处理的数据基本单位为字,一个字的字长__。 A) 为8个二进制位B) 为16个二进制位 C) 为32个二进制位D) 与CPU芯片的型号有关 5、邮局利用计算机对信件进行自动分捡的技术是__。 A)机器翻译B)自然语言理解C) 过程控制D) 模式识别 6、Windows 的资源管理器窗口分为左、右两个部分,其中__。 A)左边显示指定目录里的文件信息,右边显示磁盘上的树形目录结构 B)左边显示磁盘上的树形目录结构,右边显示指定目录里的文件信息 C)左边显示磁盘上的文件目录,右边显示指定文件的具体内容 D)两边都可以显示磁盘上的树形目录结构或指定目录里的文件信息,由用户决定 7、对于演示文稿中不准备放映的幻灯片,可以用__下拉菜单中的“隐藏幻灯片”命令隐藏。 A)编辑 B)工具 C)视图 D)幻灯片放映 8、利用Outlook Express书写电子邮件是,在“抄送”栏应填入抄送人的__。 A) 电话号码 B) 邮政编码 C) 家庭住址 D) E-mail地址 9、下列程序属于附件的是__。 A) 我的电脑B) WORD C) 网上邻居D) 画笔 10、计算机病毒不可以__。 A)破坏计算机硬件B)抢占系统资源,影响计算机运行速度 C) 破坏计算机中的数据D) 使用户感染病毒而生病 11、在Excel中,用户在工作表中输入日期,__形式不符合日期格式。 A) '20-02-2000' B) 02-OCT-2000 C) 2000-10-01 D) 2000/10/01 12、多任务机制是指操作系统可以控制__时间分配,让计算机同时执行多个应用程序。 A) 控制器B) 运算器C) 存储器D) CPU 13、在使用Windows过程中,不使用鼠标,可以打开“开始”菜单的操作是__。

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

武汉理工大学网络教育学院

武汉理工大学网络教育学院介绍 网络教育报名专业: 专业层次学习期限学分工程造价专升本 2.5-5年 市场营销专升本 2.5-5年 机电一体化技术高起专 2.5-5年 工程造价高起专 2.5-5年 国际经济和贸易高起专 2.5-5年 市场营销高起专 2.5-5年 计算机信息管理高起专 2.5-5年 计算机信息管理高起专 2.5-5年 无机非金属材料工程专升本 2.5-5年 电子信息工程专升本 2.5-5年 电气工程及其自动化专升本 2.5-5年 无机非金属材料工程技术高起专 2.5-5年 电子信息工程技术高起专 2.5-5年 电气自动化技术高起专 2.5-5年 物流管理专升本,高起专 2.5-5年

土木工程专升本 2.5-5年汽车运用和维修高起专 2.5-5年汽车服务工程专升本 2.5-5年建筑工程技术高起专 2.5-5年建筑工程管理高起专 2.5-5年计算机使用技术高起专 2.5-5年计算机科学和技术专升本 2.5-5年机械设计制造及其自动化专升本 2.5-5年机械设计和制造高起专 2.5-5年会计学专升本 2.5-5年会计高起专 2.5-5年工商企业管理高起专 2.5-5年工商管理专升本 2.5-5年工程管理专升本 2.5-5年法学专升本 2.5-5年法律事务高起专 2.5-5年电子商务高起专,专升本 2.5-5年道路桥梁和渡河工程专升本 2.5-5年道路桥梁工程技术高起专 2.5-5年专业相关的课程设置: 专业介绍(专升本) 汽车服务工程专业

本专业培养具有扎实的汽车产品及技术基础,必要的国际贸易、工商管理理论知识,具有一定的现代信息技术和网络技术知识,具备“懂技术,善经营,会服务”的能力素质,能够适应汽车产品设计服务、汽车生产服务、汽车销售服务、汽车技术服务、汽车保险、汽车运输服务、物流经营等领域工作的高级复合型人才。 主要课程:机械设计基础B、汽车构造、汽车运用工程、汽车服务工程、汽车维修工程、物流工程、交通运输学、汽车服务系统规划、汽车营销和策划、汽车电器设备、汽车电子控制系统等。 计算机科学和技术专业 本专业培养计算机科学和技术领域研究和使用高级人才。本专业培养计划和国际接轨,通过培养计划实施及理论、抽象、设计实验等教育过程,使学生不仅具有坚实的专业知识,而且具有从事计算机科学技术研究和使用、适应本学科飞速发展、涉足广泛学科领域的能力。 主要课程:高级语言程序设计、离散数学、汇编语言程序设计、计算机组成原理、计算机系统结构、数据结构、操作系统、编译原理、计算机网络、电路原理、系统分析和控制、信号处理原理、模拟电子技术等。 法学专业 法学专业主要培养系统掌握法学知识,熟悉我国法律和党的相关政策,能在国家机关、企事业单位和社会团体、特别是能在立法机关、行政机关、检察机关、审判机关、仲裁机构和法律服务机构从事法律工作的高级专门人才。 主要课程:法理学、中国法制史、宪法学、行政法和行政诉讼法、物权法、侵权行为法、民法学、商法学、知识产权法、经济法学、刑法学、民事诉讼法学、

编译原理实验报告

学生学号0120810680316 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称《编译原理》 开课学院计算机科学与技术学院 指导老师姓名何九周 学生姓名刘洋 学生专业班级软件工程0803 2010 —2011 学年第二学期

实验课程名称:编译原理 实验项目名称单词的词法分析程序设计实验成绩实验者刘洋专业班级软件0803 组别 同组者实验日期 2011 年 5 月 17日 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 实验目的: 设计,编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验要求: 在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写;上机时应随带有关的高级语言教材或参考书;要学会程序调试与纠错;每次实验后要交实验报告。 实验题目: 对于给定的源程序(如C语言或Pascal等),要求从组成源程序的字符行中寻找出单词,并给出它们的种别和属性——输出二元组序列。以便提供给语法分析的时候使用。要求能识别所有的关键字,标志符等,并且能够对出先的一些词法规则的错误进行必要的处理。 二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述) 实验原理: 由于这是一个用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号.当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串. 编写的时候,使用了文件的输入和输出,以便于词法分析的通用型,同时在文件输出时,并保存在输出文件output文件中。 从左到右扫描程序,通过初始化:1为关键字;2为标志符; 3为常数;4为运算符或界符。 三、主要仪器设备及耗材 计算机

武汉理工大学算法分析实验报告

学生实验报告书 实验课程名称算法设计与分析开课学院计算机科学与技术学院 指导教师姓名李晓红 学生姓名 学生专业班级软件工程zy1302班2015-- 2016学年第一学期

实验课程名称:算法设计与分析 同组者实验日期2015年10月20日第一部分:实验分析与设计 一.实验内容描述(问题域描述) 1、利用分治法,写一个快速排序的递归算法,并利用任何一种语言,在计算机上实现,同时 进行时间复杂性分析; 2、要求用递归的方法实现。 二.实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) 本次的解法使用的是“三向切分的快速排序”,它是快速排序的一种优化版本。不仅利用了分治法和递归实现,而且对于存在大量重复元素的数组,它的效率比快速排序基本版高得多。 它从左到右遍历数组一次,维护一个指针lt使得a[lo..lt-1]中的元素都小于v,一个指针gt 使得a[gt+1..hi]中的元素都大于v,一个指针i使得a[lt..i-1]中的元素都等于v,a[i..gt]中的元素都还未确定,如下图所示: public class Quick3way { public static void sort(Comparable[] a, int lo, int hi) { if (lo >= hi) return; int lt = lo, i = lo + 1, gt = hi; Comparable pivot = a[lo];

第二部分:实验调试与结果分析 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 1、调试方法描述: 对程序入口进行断点,随着程序的运行,一步一步的调试,得到运行轨迹; 2、实验数据: "R", "B", "W", "W", "R", "W", "B", "R", "R", "W", "B", "R"; 3、实验现象: 4、实验过程中发现的问题: (1)边界问题: 在设计快速排序的代码时要非常小心,因为其中包含非常关键的边界问题,例如: 什么时候跳出while循环,递归什么时候结束,是对指针的左半部分还是右半部分 排序等等; (2)程序的调试跳转: 在调试过程中要时刻记住程序是对那一部分进行排序,当完成了这部分的排序后, 会跳到哪里又去对另外的那一部分进行排序,这些都是要了然于心的,这样才能准 确的定位程序。 二、实验结果分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 1、实验结果:

武汉理工大学网络教育学院大学入学考试复习资料高等数学C 答案 2010-6-3 10:31

武汉理工大学网络学院试卷参考答案 课程名称:高等数学 专业班级:2010秋入学考试 一、选择题(5×3分 = 15分) B;A;D;B;A; 二、填空题(5×3分 = 15分) 1、2350x y +-= 2、1,1==b a 3、2=x 4、x e 2 5、2 121cos 2y x x c x c =-+++ 三、计算题(5×8分 = 40分) 1、由 ???≥-≥00 x x x 得 ???≥≥x x x 20 或 ? ??≥-≥0)1(0x x x , 从而定义域为 {}01=≥x x x 或. 2、2 22 21)1)(1(ln )1ln()(x x x x x x x x x y ++++-++=++-=- )()1ln(11ln 22 x y x x x x -=++-=++=; 故)(x y 为奇函数. 3、1 sin 1sin x y e x '??'= ??? 1 sin 11 cos x e x x '??=?? ???1 sin 211cos .x e x x =-? 4、令2sin x t =,得2cos dx tdt =,,22t ππ?? ∈- ??? 原式(2sin )2cos t tdt =? 322232sin cos 32sin (1cos )cos t tdt t t tdt ==-?? 2432(cos cos )cos t t d t =--? 351 132cos cos 35t t C ??=--+ ???

3 5 32 32.35C =-+ + 5、标准化得1 ln y y x x '- =,其中1()P x x =-,()ln Q x x =, 通解为()()[()]P x d x P x d x y e Q x e d x C -??=+?l n l n [l n ]x x e xe dx C -=+?]ln [?+=C dx x x x ]ln [ln C x x +=. 代入初始条件,x e y e ==,得所求特解为)ln ln 1(x x y +=. 四、应用题(2×10分 = 20分) 1、设2r A π=,10=r 厘米,05.0=?r 厘米 r r dA A ??=≈?∴π205.0102??=ππ =(厘米2),即面积大约增大了π厘米2. 2、?-=10 22)1(2dx x V π ?-+=1024)21(2dx x x π ππ154 )32 511(2=-+= 五、证明题(1×10分 = 10分) 1、证: 设x e x x f -+=2)(, 则有2(0)10,(2)40f f e =>=-<,显然()f x 在[0,2]连续,故由零点定理知,存在)2,0(0∈x 使0)(0=x f ,即方程02=-+x e x 在(0,2)有实根.

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

武汉理工大学编译原理实验报告

武汉理工大学 学生实验报告书 实验课程名称编译原理课程实验 开课学院计算机科学与技术学院指导老师姓名饶文碧 学生姓名徐强国 学生专业班级软件 1602 2018 —2019 学年第1 学期

实验课程名称:编译原理

依次输入关键字,自定义标识符 BBBJKJL KJKJ4234,整数 3432,特 殊符号和其他符号:. {} []。 二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)输出为:

三、实验小结、建议及体会 通过这次的词法分析实验,我遇到了不少问题。对于输入字符串的直接处理,首先是分类情况的不完整(起初忽略了对关键字的判断),造成输出结果与预想有很大偏差。总结下:作为编译的第一步,词法分析将高级语言一步步分解,然后转化为自己的语言,这是一个严谨有十分有趣的过程。

核心代码: struct word //存储关键字,特殊符号 { int code; char T[max]; }; word important[5]; //结构体变量存储关键字 word num; //结构体变量存储数字 word identifier; //结构体变量存储标识符 word special_symbol[7]; //结构体变量存储特殊符号 int function(word* a, word b, word c, word* d, char* input, int k) { char getword[max]; int j = 0; if (input[j] == ' ') // 判断空格 { k = k + j + 1; function(a, b, c, d, input + j + 1, k); } else if (input[j] == '=' || input[j] == '+' || input[j] == ',' || input[j] == '(' || input[j] == ')') //判断特殊符号 { if (input[j] == '*') { getword[j] = input[j]; j = j + 1; if (input[j] == '*') { } else { } else { } getword[j] = input[j]; cout << '(' << d[3].code << ',' << d[3].T << ')' << endl; j = j - 1; cout << '(' << d[2].code << ',' << d[2].T << ')' << endl; getword[j] = input[j]; for (int i = 0; i < 7; i++) { if (i == 3) continue;

编译原理标准实验报告

电子科技大学 实验报告 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:计算机学院软件工程实验室 二、实验项目名称:词法分析器的设计与实现 三、实验学时:4学时 四、实验原理 1.编译程序要求对高级语言编写的源程序进行分析和合成,生成目标程序。词法分析是对源程序进行的首次分析,实现词法分析的程序为词法分析程序。 2.词法分析的功能是从左到右逐个地扫描源程序字符串,按照词法规则识别出单词符号作为输出,对识别过程中发现的词法错误,输出相关信息。 3.状态转换图是有限有向图,是设计词法分析器的有效工具。 五、实验目的 通过设计词法分析器的实验,使同学们了解和掌握词法分析程序设计的原理及相应的程序设计方法,同时提高编程能力。 六、实验内容 实现求n!的极小语言的词法分析程序,返回二元式作为输出。 七、实验器材(设备、元器件) 1.操作系统:Windows XP

2.开发工具:VC6.0 3.普通PC即可 八、实验步骤 (1)启动VC6.0,创建空白工程项目。选择菜单中的“文件”->“新建”->“项目”,在弹出的对话框中,左边的“项目类型”框中,选择“Visual C++ 项目”,在右边框中,选择“空项目(.Net)”,在对话框下边,选择工程文件存放目录及输入名称,如Example1,单击“确定”。 (2)建立相应的单词符号与种别对照表; (3)根据状态转换图编写相应的处理函数; (4)完成词法分析器; (5)编译与调试以上程序; (6)生成相应的*.dyd文件,作为后面语法分析的输入文件。 九、实验数据及结果分析

可以对源程序进行词法分析,如果有错给出出错信息和所在行数,如果无错则生成二元式文件。 十、实验结论 本实验程序较好地完成了词法分析程序的设计与实现,能够对所给文法的程序进行词法分析,在没有词法错误的时候生成相应的二元式文件。该实验程序可一次性给出源程序中的词法错误。 十一、总结及心得体会 通过该实验,对词法分析程序的设计,以及运用C语言进行编程有了更深刻的理解,同时加深了自己对词法分析程序的原理的理解与掌握,提高了自己的动手能力。 十二、对本实验过程及方法、手段的改进建议 程序设计合理,代码可进一步优化。 报告评分: 指导教师签字:

编译原理实验报告

《编译原理》实验报告软件131 陈万全132852

一、需求分析 通过对一个常用高级程序设计语言的简单语言子集编译系统中词法分析、语法分析、语义处理模块的设计、开发,掌握实际编译系统的核心结构、工作流程及其实现技术,获得分析、设计、实现编译程序等方面的实际操作能力,增强设计、编写和调试程序的能力。 通过开源编译器分析、编译过程可视化等扩展实验,促进学生增强复杂系统分析、设计和实现能力,鼓励学生创新意识和能力。 1、词法分析程序设计与实现 假定一种高级程序设计语言中的单词主要包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符和四个算术运算符,试构造能识别这些单词的词法分析程序。 输入:由符合和不符合所规定的单词类别结构的各类单词组成的源程序文件。 输出:把所识别出的每一单词均按形如(CLASS,VALUE)的二元式形式输出,并将结果放到某个文件中。对于标识符和无符号常数,CLASS字段为相应的类别码的助记符;VALUE字段则是该标识符、常数的具体值;对于关键字和运算符,采用一词一类的编码形式,仅需在二元式的CLASS字段上放置相应单词的类别码的助记符,VALUE字段则为“空”。 2、语法分析程序设计与实现 选择对各种常见高级程序设计语言都较为通用的语法结构——算术表达式的

一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表达式>],任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。 G2[<算术表达式>]: <算术表达式>→<项> | <算术表达式>+<项> | <算术表达式>-<项> <项>→<因式>|<项>*<因式>|<项>/<因式> <因式>→<运算对象> | (<算术表达式>) 若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i 代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID······输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 3、语义分析程序设计与实现 对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。 输入:包含测试用例(由标识符、无符号数和+、?、*、/、(、)构成的算术表达式)的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。 若源程序中有错误,应指出错误信息 二、设计思路 1、词法分析程序设计与实现 1)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

相关文档
最新文档