文档视界 最新最全的文档下载
当前位置:文档视界 › 程序设计实验指导书

程序设计实验指导书

程序设计实验指导书
程序设计实验指导书

吉林大学珠海学院计算机系

C#.NET 程序设计

实验指导书

陈红玲编著

2011年2月10日

目录

实验一熟悉Visual https://www.docsj.com/doc/d516082334.html,2005开发环境 (1)

实验二基本数据类型和控制台输入输出 (2)

实验三程序基本控制结构 (3)

实验四常用数据类型 (5)

实验五类和对象 (7)

实验六继承、多态和接口 (8)

实验七控件使用 (9)

实验八目录与文件管理 (13)

实验九图形图像处理 (14)

实验十数据库编程 (15)

实验十一开发Web应用程序* (16)

具体实验安排和要求 (17)

实验一熟悉Visual https://www.docsj.com/doc/d516082334.html,2005开发环境

【学时数:2学时】

一、实验目的

1.掌握Visual https://www.docsj.com/doc/d516082334.html,2005的基本操作方法。

2.掌握C#控制台应用程序、Windows应用程序的基本操作过程。

3.初步理解C#程序的结构和特点,掌握基本的编译和调试方法。

二、实验内容

1.设计一个简单的C#控制台应用程序,逐行显示自己的学号、姓名、专业信息。(参考教材P8页例1-1)

2.设计一个Windows应用程序,在窗体上显示三个标签框,标签框里的内容分别为自己的学号、姓名、专业。(参考教材P9页例1-2)

3. 阅读教材1.3节内容,录入P14页[例1-4]程序,运行并输出结果,了解C#程序的结构。尝试进行如下改动并思考:

(1)将Program.cs、HelloName.cs和HelloMe.cs文件中的命名空间依次改为ConsoleApplicationExample1、ConsoleApplicationExample2、ConsoleApplicationExample3。看看程序还能不能运行。

(2)程序应该如何修改,才能正常运行?

(3)namespace关键字声明命名空间有何作用?using关键字指明引用的命名空间有何作用?

实验二基本数据类型和控制台输入输出

【学时数:2学时】

一、实验目的

1.理解C#的值类型、常量和变量的概念。

2.理解数据类型的转换以及装箱和拆箱的区别。

3.掌握C#的常用运算符以及表达式的运算规则。

二、实验内容

1.设计一个控制台程序,从键盘输入一个人的名字,在显示器中显示对输入姓名的问候。比如输入:张三;输出:张三,欢迎你!

提示:输入字符串放入s中,将s+”,欢迎你!”,再输出。

2.设计一个控制台程序,从键盘输入两个整数,输出这两个数的和、差、积、商(商要求为数学商,非整除商)。

提示:使用语句int.Parse(Console.ReadLine())获得用户输入的两个数。

3.阅读教材2.5节内容,输入下面的语句,观察输出格式:

Console.WriteLine("{0:D}",10);

Console.WriteLine("{0:D5}", 10);

Console.WriteLine("{0:F}", 10);

Console.WriteLine("{0:F4}", 10);

Console.WriteLine("{0:00000}", 123);

Console.WriteLine("{0:000}", 12345);

Console.WriteLine("{0:0000}", 123.64);

Console.WriteLine("{0:00.00}", 123.6484);

Console.WriteLine("{0:####}", 123);

Console.WriteLine("{0:####}", 123.64);

Console.WriteLine("{0:####.###}", 123.640);

Console.WriteLine("{0:####.##}", 0.0100);

Console.WriteLine("{0:####.##}", 123.648);

Console.WriteLine("{0}--{0:p}good", 12.34F);

Console.WriteLine("{0}--{0:00000}good", 456);

Console.Write("{0,-4}{1,-4}{2,-4}",1,2,3);

DateTime dt = new DateTime(2011,3, 11);

string s=string.Format("{0:yyyy年MM月dd日}",dt);

Console.WriteLine(s);

Console.ReadLine();

实验三程序基本控制结构(一)

【学时数:2学时】

一、实验目的

1.掌握C#的两种分支语句(if、switch)的使用方法。

2.掌握C#的4种循环语句(while、do/while、for、foreach)的使用方法。

二、实验内容

1.编写一个控制台程序,输入一个学生的成绩,输出其等级。(优:>=90;良:>=80;中:>=70;及格:>=60;不及格:<60)

2.编写控制台程序,定义两个整数,定义一个字符变量,当这个字符变量分别是‘+’、‘-’、‘*’、‘/’时,用switch语句输出这两个数的运算结果。

3.编写控制台程序,输出1-5的平方值,要求分别用for语句、while语句、do-while语句实现。

4. 编写控制台程序,定义一个字符串变量,从键盘往其中输入一行字符串,使用foreach语句逐行输出其中的每一个字符。

提示: foreach (char c in s)……输出其中的每个字符。

思考题:

1. 编写控制台程序,要求完成下列功能:

(1)接收一个整数n.

(2)如果接收的值n为正数,输出1~n的全部整数。并转到(1)继续接收下一个整数。

(3)如果接收的值为负值,用break或者return退出程序。

2. 编写控制台程序,输入两个整数将其整除,并使用try-catch语句捕获除数为0的异常,并输出异常消息。

《编译原理》实验指导书-2015

武汉科技大学计算机科学与技术学院 编译原理实验指导书

实验一词法分析器设计 【实验目的】 1.熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。 2.复习高级语言,进一步加强用高级语言来解决实际问题的能力。 3.通过完成词法分析程序,了解词法分析的过程。 【实验内容】 用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。 【实验要求】 1.要求绘出词法分析过程的流程图。 2.根据词法分析的目的以及内容,确定完成分析过程所需模块。 3.写出每个模块的源代码,并给出注释。 4.整理程序清单及所得结果。 【说明】 运行成功以后,检查程序,并将运行结果截图打印粘贴到实验报告上。 辅助库函数scanerLib设计以及使用说明: 下面内容给出了一个辅助库函数的接口说明以及具体实现。 接口设计 //字符类 class Token { TokenType type; String str; Int line; } //词法分析结果输出操作类 class TokenWriter { ArrayList tokens; //用来记录所识别出来的token TokenWriter(); //构造函数指定输入文件名,创建文件输出流 V oid Add(Token); //将词法分析器中分析得到的Token添加到tokens中 WriteXML(); //将tokens写出到目标文件.xml中 } //词法分析操作词法分析生成文件接口<暂时不需要对该类的操作;下一步做语法分析的时候使用> class TokenReader

编译原理实验指导

编译原理实验指导 实验安排: 上机实践按小组完成实验任务。每小组三人,分别完成TEST语言的词法分析、语法分析、语义分析和中间代码生成三个题目,语法分析部分可任意选择一种语法分析方法。先各自调试运行,然后每小组将程序连接在一起调试,构成一个相对完整的编译器。 实验报告: 上机结束后提交实验报告,报告内容: 1.小组成员; 2.个人完成的任务; 3.分析及设计的过程; 4.程序的连接; 5.设计中遇到的问题及解决方案; 6.总结。

实验一词法分析 一、实验目的 通过设计编制调试TEST语言的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 二、实验预习提示 1.词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示 成以下的二元式(单词种别码,单词符号的属性值)。 2.TEST语言的词法规则 |ID|ID |NUM →a|b|…|z|A|B|…|Z →1|2|…|9|0 →+|-|*|/|=|(|)|{|}|:|,|;|<|>|! →>=|<=|!=|== →/* →*/ 三、实验过程和指导 1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。 2.编制好程序。 3.准备好多组测试数据。 4.程序要求 程序输入/输出示例:

编译原理实验报告实验一编写词法分析程序

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:13软件四 姓名:丁越 学号: 电子邮箱: 实验地点:秋白楼B720 实验成绩: 日期:2016年3 月18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数 变为二进制形式存入数组中 ci中,并记录其在表中的位置。 lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程, 输出错误编号。 2.实践部分

编译实验指导书(2017)

《编译原理》 实验指导书 太原理工大学计算机与软件学院 2017 年 3 月

《编译原理》实验 适用专业:计算机实验类别:专业实验 实验时数:8学时 一、实验课程的性质、目的和任务 1.培养学生初步掌握编译原理实验的技能。 2.验证所学理论、巩固所学知识并加深理解。 3.对学生进行实验研究的基本训练。 二、实验课程的内容、要求及学时分配 实验一、无符号数的词法分析程序(4学时) 内容:掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。 要求:从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。 无符号数文法规则可定义如下: <无符号数>→<无符号实数>│<无符号整数> <无符号实数>→<无符号整数>.<数字串>[E<比例因子>]│ <无符号整数>E<比例因子> <比例因子>→<有符号整数> <有符号整数>→[+│-]<无符号整数> <无符号整数>→<数字串> <数字串>→<数字>{<数字>} <数字>→0 1 2 3 (9) 读无符号数的程序流程图见下图

实验二、逆波兰式生成程序(4学时) 内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序; 要求:利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式(中缀表达式)转化成逆波兰式。 逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算 符的优先关系。 常用运算符优先关系矩阵 如上表所示的优先关系矩阵表示了+,-,*,/,↑,(,)等七种运算符之间的相互优先关系。“>、<、=”三种符号分别代表“大于”、“小于”、“相等”三种优先关系。左边的“=”与右边的“(”之间没有优先关系存在,所以表中为空白。 逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。 下面给出了逆波兰表达式生成算法的流程图。(为了便于比较相邻运算符的优先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈)。

编译原理实验指导书2010

《编译原理》课程实验指导书 课程编号: 课程名称:编译原理/Compiler Principles 实验总学时数: 8 适用专业:计算机科学与技术、软件工程 承担实验室:计算机学院计算机科学系中心实验室、计算机技术系中心实验室 一、实验教学的目的与要求 上机实习是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实习题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的2次上机实验都属于一种设计类型的实验,每个实验的训练重点在于基本的编译技术和方法,而不强调面面俱到;实验的目的是旨在使学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容;培养学生编制算法的能力和编程解决实际问题的动手能力。 要求学生在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法设计和程序代码的编写;上机时应随带有关的编译原理教材或参考书;要学会程序调试与纠错。 每次实验后要交实验报告,实验报告的内容应包括: (1)实验题目、班级、学号、姓名、完成日期; (2)简要的需求分析与概要设计; (3)详细的算法描述; (4)源程序清单; (5)给出软件的测试方法和测试结果; (6)实验的评价、收获与体会。 开发工具: (1)DOS环境下使用Turbo C; (2)Windows环境下使用Visual C++ 。 考核: 实验成绩占编译原理课程结业成绩的10%。 三、单项实验的内容和要求: 要求每个实验保证每个学生一台微机。 实验一(4学时):单词的词法分析程序设计。 (一)目的与要求 1.目的 通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

编译实验

SAMPLE语言定义 一、字符集定义 1.<字符集> →<字母>│<数字>│<单界符> 2.<字母> →A│B│…│Z│a│b│…│z 3.<数字> →0│1│2│…│9 4.<单界符> →+│-│*│/│=│<│>│(│)│[│]│:│. │; │, │' 二、单词集定义 5.<单词集> →<保留字>│<双界符>│<标识符>│<常数>│<单界符> 6.<保留字> →and│array│begin│bool│call│case│char│constant│dim│do│else│end│false│for│if│input│integer│not│of│or│output│procedure│ program│read│real│repeat│set│stop│then│to│true│until│var│while│ write 7.<双界符> →<>│<=│>=│:= │/*│*/│.. 8.<标识符> →<字母>│<标识符> <数字>│<标识符> <字母> 9.<常数> →<整数>│<布尔常数>│<字符常数> 10.<整数> →<数字>│<整数> <数字> 11.<布尔常数> →true│false 12.<字符常数> →' 除{'} 外的任意字符串' 三、数据类型定义 13.<类型> →integer│bool│char 四、表达式定义 14.<表达式> →<算术表达式>│<布尔表达式>│<字符表达式> 15.<算术表达式> →<算术表达式> + <项>│<算术表达式> - <项>│<项> 16.<项> →<项> * <因子>│<项> / <因子>│<因子> 17.<因子> →<算术量>│- <因子> 18.<算术量> →<整数>│<标识符>│(<算术表达式> ) 19.<布尔表达式> →<布尔表达式> or <布尔项>│<布尔项> 20.<布尔项> →<布尔项> and <布因子>│<布因子> 21.<布因子> →<布尔量>│not <布因子> 22.<布尔量> →<布尔常量>│<标识符>│(<布尔表达式> )│ <标识符> <关系符> <标识符>│<算术表达式> <关系符> <算术表达式> 23.<关系符> →<│<>│<=│>=│>│= 24.<字符表达式> →<字符常数>│<标识符> 五、语句定义 25.<语句> →<赋值句>││<复合句> 26.<赋值句> →<标识符> := <算术表达式> 27.→if <布尔表达式> then <语句>│if <布尔表达式> then <语句> else <语句> 28. →while <布尔表达式> do <语句> 29. →repeat <语句> until <布尔表达式> 30.<复合句> →begin <语句表> end 31.<语句表> →<语句> ;<语句表>│<语句>

编译程序实验指导书讲解教学提纲

编译程序实验指导书解讲. 编译程序实验指导书 实验目的:用C语言对一个C语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 1.词法分析 1.1 实验目的 设计、编制并测试一个词法分析程序,加深对词法分析原理的理解。 1.2 实验要求 1.2.1 待分析的C语言子集的词法 1. 关键字

main if else int char for while 所有的关键字都是小写。 2.专用符号 = + - * / < <= > >= == != ; : , { } [ ] ( ) 3.其他标记ID和NUM 通过以下正规式定义其他标记: →letter(letter|digit) *ID →digit digit *NUM letter→a|…|z|A|…|Z digit→0|…|9… 4.空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。 1.2.2 各种单词符号对应的种别码 表1 各种单词符号的种别码 单词符号种别码单词符号种别码单词符号种别码 main 1 = 21 , 32 int 2 + 22 : 33 char 3 - 23 ; 34 if 4 * 24 > 35 else 5 / 25 < 36 for 6 ( 26 >= 37 while 7 ) 27 <= 38 ID 10 [ 28 == 39 MUN 20 ] 29 != 40 { 30 ‘\0' 1000 } 31 ERROR -1 1.2.3 词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中, . syn为单词种别码。 . Token为存放的单词自身字符串。 . Sum为整型常量。 具体实现时,可以将单词的二元组用结构进行处理。 例如,对源程序 main() { int i=10; while(i) i=i-1; } 的源文件,经词法分析后输出如下序列: (1,main) (26,() (27,)) (30,{} (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,() (10,i) (27,)) (10,i) (21,=) (10,i) (23,-) (20,1) (34,;) (31,))

编译实验报告+源代码

课程设计报告 ( 2013-- 2014年度第1学期) 名称:编译技术课程设计B 题目:简单编译程序的设计与实现院系:计算机系 班级:XXX 学号:XXX 学生姓名:XXX 指导教师:XXX 设计周数:XXX 成绩: 日期:XX 年XX 月

实验一.词法分析器的设计与实现 一、课程设计(综合实验)的目的与要求 1.1 词法分析器设计的实验目的 本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。 1.2 词法分析器设计的实验要求 设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。 单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。 表1-1 单词符号及其内部表示

二、设计(实验)正文 1.词法分析器流程图 2.词法分析器设计程序代码 // first.cpp : 定义控制台应用程序的入口点。// #include"stdafx.h" #include #include using namespace std; int what(char a) { if((int(a)>=48)&&(int(a)<=57)) {

编译原理实验指导书(图)

编译原理 实 验 指 导 书

前言 编译原理是计算机科学与技术、软件工程等专业的主干课和必修课,由于这门课程相对抽象且内容较复杂,一直是比较难学的一门课程。在编译原理的学习过程中,实验非常重要,只有通过上机实验,才能使学生对比较抽象的课程内容产生一个具体的感性认识。 本书实验环境主要为C环境及一个词法分析器自动生成工具FLEX和一个语法分析器自动生成工具BISON。书中给出的参考源程序也是C源程序,但由于实验者熟悉精通的语言工具不尽相同,因而强求采用统一的编程语言编程是不现实的。实验者在掌握了编译程序各个阶段的功能和原理之后,不难借助使用其他自己熟悉的语言实现相关功能。 实验者在实验过程中应该侧重写出自己在算法分析、设计思路、实现功能或程序代码等方面的特色,写出设计和实现过程中遭遇到的难点和解决办法,可以不拘泥于实验指导给出的参考性设计思路,尽可能在深度和广度上加以拓展。只有这种各具特色的实验报告,才将更有利于体现实验者在创新思维和动手能力上的差异。 通过这些实验,能使学生对这些部份的工作机理有一个详细的了解,达到“知其然,且知其所以然”的目的。并可在C环境下对自动生成工具生成的词法、语法分析器进行编译调试。 由于手工生成词法和语法分析器的工作量太大,在实际中常用自动生成工具来完成之。这些工具中最著名的当属贝尔实验室的词法分析器生成工具LEX和语法分析器生成工具YACC。它们现已成为UNIX的标准应用程序同UNIX一起发行。与此同时GNU推出与LEX完全兼容的FLEX,与YACC完全兼容的BISON。这两个程序都在Internet上以源代码的形式免费发行,所以很容易在其它操作系统下重新编译安装。我们实验采用的就是for dos的FLEX和BISON。本书有关的编译工具及其源程序例子,可到BISON的网站上下载。关于FLEX和BISON的用法简介,参见附录,如需更详细的介绍,请参阅编译工具中帮助文件。

编译原理实验教(学)案

实验教学进度表

实验一 C语言子集编译程序 一、实验目的 用C语言对一个C语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 1.设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 2.编制一个递归下降分析程序,并对C语言的简单子集进行分析。 3.通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换中间代码的语义翻译方法。 二、实验要求、容及学时 词法分析部分:2学时 (一)待分析的C语言子集的词法: 1.关键字 main if else int return void while 所有关键字都是小写。 2.专用符号 = + - * / < <= > >= == != ; : , { } [ ] ( ) 3.其他标记ID和NUM 通过以下正规式定义其他标记: ID→letter(letter|digit)*NUM→digit(digit)* letter→a|…|z|A|…|Z digit→0|…|9 4.空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段空格通

(二)词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中, syn 为单词类别码。 token 为存放的单词自身字符串。 sum 为整型常量。 具体实现时,可以将单词的二元组用结构进行处理。 例如:对源程序 main() { int i=10; while(i) i=i-1; } 的源文件,经词法分析后输出如下序列: (1,main) (26,() (27,)) (30,{) (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,() (10,i) (27,)) (10,i) (21,=) (10,i) (23,-) (20,1) (34,;) (31, }) (三)词法分析程序主要算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 : 注: ①关键字表初值 关键字作为特殊标识符处理,把它们预先安排在一表格中(称为关键字),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表可处理为一个字符串数组(实际为指向字符数组的指针数组),其描述如下: char *KEY_WORDS[8]= {“main”,”int”,”char”,”if”,”else”,”for”,”while”}; 为分析方便,这里把main作关键字处理。 ②程序中需要用到的主要变量:syn,token和sum。 2.扫描子程序(scaner)的算法思想

编译程序实验指导书讲解教学提纲

编译程序实验指导书 讲解

编译程序实验指导书 实验目的:用C语言对一个C语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 1.词法分析 1.1 实验目的 设计、编制并测试一个词法分析程序,加深对词法分析原理的理解。 1.2 实验要求 1.2.1 待分析的C语言子集的词法 1. 关键字 main if else int char for while 所有的关键字都是小写。 2.专用符号 = + - * / < <= > >= == != ; : , { } [ ] ( ) 3.其他标记ID和NUM 通过以下正规式定义其他标记: ID→letter(letter|digit)* NUM→digit digit* letter→a|…|z|A|…|Z digit→0|…|9… 4.空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。 1.2.2 各种单词符号对应的种别码 表1 各种单词符号的种别码 单词符号种别码单词符号种别码单词符号种别码 main 1 = 21 , 32 int 2 + 22 : 33 char 3 - 23 ; 34 if 4 * 24 > 35 else 5 / 25 < 36 for 6 ( 26 >= 37 while 7 ) 27 <= 38 ID 10 [ 28 == 39 MUN 20 ] 29 != 40 { 30 ‘\0’ 1000 } 31 ERROR -1

1.2.3 词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中, . syn为单词种别码。 . Token为存放的单词自身字符串。 . Sum为整型常量。 具体实现时,可以将单词的二元组用结构进行处理。 例如,对源程序 main() { int i=10; while(i) i=i-1; } 的源文件,经词法分析后输出如下序列: (1,main) (26,() (27,)) (30,{} (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,() (10,i) (27,)) (10,i) (21,=) (10,i) (23,-) (20,1) (34,;) (31,)) 1.3 词法分析程序的主要算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想 是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。 1. 主程序示意图 主程序示意图如图1所示。 图1 词法分析主程序示意图 其中初值包括如下两方面: (1)关键字表初值 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识 别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:

《编译原理(实验部分)》实验1_程序预处理

《编译原理》(实验部分) 实验1_程序预处理 一、实验目的 明确预处理子程序的任务,构造一个简单的预处理子程序,对源程序进行相应的预处理。 二、实验设备 1、PC 兼容机一台;操作系统为WindowsWindowsXP。 2、Visual C++ 6.0 或以上版本, Windows 2000 或以上版本,汇编工具(在Software 子目录下)。 三、实验原理 定义模拟的简单语言的词法构成,编制读入源程序和进行预处理的程序,要求将源程序读入到文件或存入数组中,再从文件或数组中逐个读取字符进行预处理,包括去掉注释、Tab、Enter和续行符等操作,并显示预处理后的程序。 四、实验步骤 1、从键盘读入源程序存放到输入缓冲区中。 2、对源程序进行预处理,预处理后的程序存放到扫描缓冲区中。 3、显示预处理后的程序。 参考源程序(C++语言编写) //源程序的输入及预处理 #include #include void pro_process(char *); void main( ) //测试驱动程序

{ //定义扫描缓冲区 char buf[4048]={'\0'}; //缓冲区清0 //调用预处理程序 pro_process(buf); //在屏幕上显示扫描缓冲区的内容cout<='A' && cur_c<='Z') //大写变小写 cur_c+=32; if(cur_c =='\t' || cur_c =='\n') //空格取代TAB换行 cur_c=' '; buf[i++]=cur_c ;

C语言程序设计实验指导书

C 语言程序设计 实 验 指 导 书 电子工程学院 2012-2

实验一 C程序的运行环境和编辑、调试、运行简单C程序 一、实验目的 1.了解 Turbo C 的基本操作方法,学会独立使用该系统。 2.掌握在该系统上如何编辑、编译、运行一个C程序。 二、实验内容及步骤 1.进入C的工作环境 1)在Windouws环境下:“开始”→“程序”→“MS-DOS” 屏幕上进入 MS-DOS窗口 2)在Dos环境下:键入命令c:\> cd c:\tc↙ c:\tc> tc↙ 屏幕上出现Turbo C的工作环境 2.熟悉Turbo C的工作环境 了解Edit窗口与Message窗口 了解主菜单的8个菜单项 File Edit Compile Project Option Debug break/watch 3.输入并运行一个简单的程序 File→New 输入源程序:

main() { printf("This is a C program.\n"); printf("OK\n"); } 按F9进行编译和连接,观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。 按Run→Run(或按Ctrl+F9) 编译、连接、运行一起完成。 按Run→User screen(或按Alt+F5) 察看运行结果。 按任一键从用户屏切换回TC窗口。 4.输入并编辑第二个C程序 File→New 输入源程序: main ( ) { int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n", sum); }

编辑、运行、调试该程序。 5.编辑、运行、调试自己编写的程序(至少一个程序) 如:输入上底、下底和高,计算梯形面积。 观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。 用File→Save (或F2)保存程序(程序名为a1.c) 三、实验报告要求 写明: 1.实验目的 2.实验内容与步骤 3.编写的程序(题目,经调试、运行后正确的程序) 4.编译过程中出现的错误信息。 5.总结讨论本次实验的结果和收获。

编译原理实验指导书-语法分析

编译原理实验指导书 实验2 语法分析 实验目的 1.巩固对语法分析的基本功能和原理的认识。 2.通过对语法分析表的自动生成加深语法分析表的认识。 3.理解并处理语法分析中的异常和错误。 实验要求 一、对学生要求: 1.掌握语法分析程序的总体框架,并将其实现。 2.掌握语法分析表的构造方法 3.掌握语法分析的异常和错误处理。 二、对实验指导教师要求: 1.明确语法分析的基本功能和原理。 2.语法分析程序的总体结构及其关键之处。 3.语法分析表的生成程序。 4.语法分析的异常和错误处理。 5.编写并运行该题目程序代码,具有该题目的参考答案。 6.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。 实验内容 采用至少一种语法分析技术(LL(1)、SLR(1)、LR(1)或LALR(1))分析类高级语言中的基本语句(至少包括函数定义、变量说明、赋值、循环、分支等语句)。 对如下工作进行展开描述 (1)给出如下语言成分的文法描述 ?函数定义(或过程定义) ?变量说明 ?赋值

?表达式 ?循环 ?分支 (2) 语法分析程序的总体结构及物理实现(程序框图) (3) 核心数据结构和功能函数的设计 (4) 错误处理 错误的位置及类型等 实验评分标准 一、课堂表现(10分) 1.出勤情况(按时,迟到,早退,缺席) 2.是否遵守课堂纪律 二、实验结果(50分) 1.当堂按时完成(10分) 2.独立完成(10分),(和同学协商完成,在老师帮助下完成)3.结果正确无误(15分)其中分析表的输出占5分 4.功能齐全,界面美观,具有较好演示效果(10分) 5.在源程序中有必要的注释和说明,程序文档齐全(5分)三、实验报告(40分) 1.语言的文法描述(10分) 2.语法分析程序的模块结构图(10分) 3.核心数据结构的设计(10分) 4.错误处理(5分) 5.实验过程中遇到的问题的总结及实验的体会(5分)

编译原理实验指导书

编译原理实验指导 书

《编译原理》实验指导书 太原科技大学计算机学院 -3-1

序 《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计和算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和掌握编译原理和技术的基本概念、基本原理和实现方法,实践环节非常重要,只有经过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。 为了配合《编译原理》课程的教学,考虑到本课程的内容和特点,本指导书设置了七个综合性实验,分别侧重于词法分析、NFA的确定化、非递归预测分析、算符优先分析器的构造、LR分析、语义分析和中间代码的生成、基于DAG的基本块优化,以支持编译程序的各个阶段,基本涵盖了《编译原理》课程的主要内容。 本指导书可作为《编译原理》课程的实验或课程设计内容,在课程教学的同时,安排学生进行相关的实验。实验平台可选择在MS-DOS或Windows操作系统环境,使用C/C++的任何版本作为开发工具。学生在做完试验后,应认真撰写实验报告,内容应

包括实验名称、实验目的、实验要求、实验内容、测试或运行结果等。

目录 实验一词法分析 ........................................................... 错误!未定义书签。实验二 NFA的确定化.................................................... 错误!未定义书签。实验三非递归预测分析 ............................................... 错误!未定义书签。实验四算符优先分析器的构造................................... 错误!未定义书签。实验五 LR分析 .............................................................. 错误!未定义书签。实验六语义分析和中间代码生成................................ 错误!未定义书签。实验七基于DAG的基本块优化................................... 错误!未定义书签。

编译原理实验报告

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

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

《C语言》实验指导书

《C语言程序设计》 实 验 指 导 书 华中师范大学信息技术系 二00九年三月

项目一:熟悉C语言的运行环境及简单程序设计 (11) 实验一熟悉C语言的运行环境 实验二c程序初步 (3) 实验三数据类型及输入输出 (5) 实验四运算符与表达式 (8) 项目二:流程控制、指针、数组、模块化程序设计 实验五分支程序设计 (9) 项目六循环程序设计 (11) 项目七函数 (12) 项目八数组 (13) 项目九指针 (15) 项目三:综合程序设计——竞赛编排及优胜排序 (注:每个项目应包含实验学习目标、实验内容、实验原理、实验设备、实验步骤、实验注意事项或实验思考等内容。 基本型实验应有明确的实验学习目标、详细的过程和具体的结果;综合设计型实验应有明确的实验学习目标、可参考的过程和实验结果评价标准)

实验基本要求 1、每次实验前,学生必须预习实验内容,实验程序必须自行编制、自行调试。 2、每次实验,学生都必须提交实验报告,内容包括实验目的、实验内容、实验程序、实验过程(软件的使用、程序的调试)等,见下面的实验报告模版。 3、学生第一次上机时,应在教师机指定文件夹下建立以自己学号+姓名的子文件夹,例如学号为2005683001的学生张三,应在教师机指定文件夹下建立“2005683001张三”的子文件夹,此文件夹就是学生张三存放本课程实验全部文档的文件夹,也是教师评价学生饰演成绩的主要依据。 4、学生每次实验完毕后,都应将实验报告、实验程序等文档上传到教师机自己建立的子文件夹中。 5、学生每次实验,都应该在考勤表上签到。 附 华中师范大学信息技术系c语言程序设计实验报告 实验目的: 实验设备(包括软件): 实验内容: 实验过程: 实验程序及实验结果: 实验体会:

编译实验2

实验二基于YACC的TINY语法分析实验 一、实验目的 在这一阶段的实验中,同学们要完成tiny编译器的语法分析工作,即用bison工具生成一个语法分析程序,对词法分析输出的单词符号串(终结符串)进行自底向上的分析,并依次输出用来进行归约的语法规则。 二、Tiny语言的语法 参见教材。请大家注意,文档中给出的BNF描述并不能直接被YACC识别,而是需要进行适当的改写。请大家在做实验前,仔细研究一下教材中给出的例子。 三、软件工具及文档说明 实验环境为Windows操作系统,语法分析使用的主要工具是bison。我们会提供给大家一些基本的数据结构、程序框架以及工具软件。实验所用到的程序和工具主要包括两部分:1.工具和程序框架(在StarterFiles路径下) 以下是主要文件的列表: pp2.dsp/dsw pp2工程文件不需要改动 main.c 主程序不需要改动 scanner.h 词法分析程序的头文件不需要改动 scanner.l 词法分析程序需要改动 parser.h 语法分析程序的头文件不需要改动 parser.l 语法分析程序需要改动 utility.h 一些工具函数不需要改动 test.frag 测试文件不要改动 flex.exe 工具不要改动 bison.exe/simple 工具不要改动 debug.bat 工具不要改动 程序的执行方法是: (0)先根据完善parse.y(否则会编译出错) (1)运行debug.bat(会生成parser_tab.h和parser_tab.c); (2)用vc6.0打开pp2.dsw,编译链接生成pp2.exe; (3)运行pp2 [filename]。其中filename是可选部分,如果没有filename,就默认是打开test.frag,否则就打开filename指定的文件。这样设计,主要考虑在调试pp2程序时比较方便,但是测试程序时还是要对实例中给出的*.frag文件逐一进行测试。另外,大家最好自己再编写一些合法和不合法的源文件,对程序进一步进行测试。 scanner.l是我们为大家提供的词法分析器,如果不对tiny语言本身作任何扩展,则不需要修改它,如果想对语言进行扩展,就要对它进行相应的修改。大家也可以用自己在PP1实验中实现的词法分析器代替scanner.l,但是一定要保证你的词法分析器的输出和我们所提供的词法分析器的输出是一致的,否则会影响语法分析器的实现。 2.实例(在samples路径下) *.frag Tiny源程序 *.out 正确的语法分析结果

《编译原理》实验指导书-最终版

编译方法 实验指导书 柴本成赵晨编写 浙江万里学院

目录 实验一有限自动机的构造与实现................................. 错误!未定义书签。实验二词法分析器的设计..................................... 错误!未定义书签。实验三语法分析-递归下降分析器............................. 错误!未定义书签。实验四 LL(1)文法预测分析表的实现.............................. 错误!未定义书签。附录......................................................... 错误!未定义书签。 附录一实验结果的提交与检查.............................. 错误!未定义书签。 附录二实验报告参考格式.................................. 错误!未定义书签。 附录三 Visual C++上机环境简介............................ 错误!未定义书签。 附录四参考程序.......................................... 错误!未定义书签。

实验一 有限自动机的构造与实现 一、实验目的 1、 正确理解正规式和正规集以及有限自动机的定义; 2、 熟练掌握用状态转换图表示有限自动机的方法。 二、实验预习提示 1、 正规表达式就是一种形式化的表示法,它可以表示单词符号的结构,从而精确地定 义单词符号集。正规表达式简称为正规式,它表示的集合即为正规集。 2、 状态转换图是一张当输入不同内容时选择不同分析路径的有向图。一个状态转换图 可用于识别一定的字符串。 3、 有限自动机(FA )是更一般化的状态转换图,可用来识别正规集;分为DFA 和NFA 两种。 三、实验内容 构造识别如下字符串的状态转换图,并将其编程实现。 1、 识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10); 参考程序: #include <> #include <> ][E G 'E T E '→εE T E '+→'T F E '→i E E )(→' #i ”,例如“”,通过ftp 或Email 提交。 1. 检查方式与评分标准 及程序输出与标准输出相符合的程度。 附录二 实验报告参考格式 以实验二(词法分析器的设计为例)一、实验目的与任务 编制一个读单词过程,从输入的源程序中,自身值。(遇到错误时可显示“Error ”二、实验步骤 1. 符和要测试的程序例。 2. 程序的功能描述。 (在这里描述你的程序的功能)

相关文档