简单的C语言编辑器课程设计

合集下载

《C语言程序设计》课程教学设计方案

《C语言程序设计》课程教学设计方案

C语言程序设计课程教学设计方案课程名称:C语言程序设计课程编号:590109120632课程类型:理论含实践课程学时:94学时,其中理论教学47学时,实践教学47学时适用专业:图形图像制作一、课程教学设计的背景(一)专业认知1.专业培养目标:全面贯彻党的教育方针,面向企事业单位平面设计与制作、室内外设计与制作及基础图像处理等一线岗位,培养适应我国社会主义市场经济和现代化建设需要,德、智、体、美全面发展,掌握设计理论知识,熟练运用计算机辅助设计软件进行平面及三维产品设计制作,具备一定的美术设计理念和艺术素养以及基层青年工作能力的高端技能型专门人才。

2.人才培养规格:(1)基本素质与基本技能要求学生应具有良好的德、智、体、美全面发展的综合素质,具有正确的人生观、价值观和良好的职业道德修养,具有高职生应有的文化修养及健康的体魄和心理素质;具有较扎实的计算机操作能力;具有相当水平的英语应用能力。

(2)专业素质与专业技能要求掌握数字化平面、立体图形及图像制作技术的基础理论和基本原理,具有一定的审美能力,具备基础数字图像制作与处理、典型平面产品设计与印前图文处理、三维装饰效果图制作、建筑施工图制作等能力,熟练掌握相关计算机制图软件,能综合运用所学知识,设计制作高品质的平面典型产品及三维立体图像。

(3)专业拓展能力要求具备计算机制图应用领域的相关知识和能力,特别是在互联网基础应用、网站规划与网页设计、网络动画制作等方面的知识和能力,能够学有所长,拓展延伸,加大专业辐射面,培养锻炼学生的自主创业能力。

3.证书要求:类别名称发证机关等级对应课程基本证书英语应用能力考试教育部考试中心A/B级实用英语汉字录入学院合格计算机基础与应用二选一图形图像处理——图像制作员Photoshop平台人力资源与社会保障部中级计算机图像制作技术计算机图像制作技术实训图形图像处理——图像制作员3DMAX平台人力资源与社会保障部中级三维动画设计动画制作实训(三维)推荐证书二选一图形图像处理——图像制作员Illustrator平台人力资源与社会保障部中级矢量绘图技术广告招贴创意设计图形图像处理——图像制作员AutoCAD平台人力资源与社会保障部中级AUTOCAD制图基础工程制图与识图计算机应用技术NIT证书教育部合格C语言程序设计计算机基础与应用(二)课程的性质、地位和作用图形图像制作专业职业基础课,学生通过这门课的学习,可以对程序编制和程序调试的过程有一个全面的了解并对程序编制工具C语言有一个全面的了解,重点的掌握C语言语法、程序调试基本方法,具备自己独立编制小型程序、调试中等程序、读懂大型程序的能力,为后续动态网页开发课程的学习奠定基础。

C++课程设计简易文本编辑器

C++课程设计简易文本编辑器

目录第一章课程设计目的和要求 (1)1.1课程设计的目 (1)1.2基本要求 (1)第二章课程设计任务内容 (2)2.1设计背景 (2)2.2简易文本编辑器设计内容 (2)第三章详细设计 (3)3.1总体结构图 (3)3.2函数分析 (3)3.3主函数程序流程图 (4)3.4子函数流程图 (5)第四章程序编码与调试 (7)4.1程序编码 (7)4.2编码调试 (8)4.3运行结果 (9)第五章课程设计心得与体会 (11)附录1 参考文献 (12)附录2 源程序代码 (13)第一章课程设计目的和要求C语言课程设计是一门实践性非常强的课程,不但要注重c语言程序设计基本知识的学习,更要注重程序设计技能的培养,使学生能够允许渐进地把握c语言程序设计的技能。

通过课程设计,培养学生阅读和编写程序的能力,培养计算机程序设计的能力和素质,以及思维方法。

初步积累编程经验,打下良好的计算机应用基础。

1.1课程设计的目1.通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《c语言程序设计》课程学习的内容2.掌握工程软件设计的基本方法,强化上级动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性。

3.掌握基本的程序设计过程和技巧,掌握基本的分析问题合理性,通过计算机求解问题的能力,具备初步的高级语言程设计能力。

为后续个门计算机课程的学习和毕业设计打下结实基础。

4.通过c语言课程设计,使学生了解高级程序设计语言的结构。

1.2 基本要求1.基本要求:①要求用VC中的MFC控件打开和保存文件。

②要求在设计的程序中至少能完成六种编辑功能。

③完成的程序界面要美观,能够完成六种编辑的全过程。

2.创新要求:①在记事本中增加工具栏,工具栏中应有常使用的工具按钮;②在记事本中增加状态栏;第二章课程设计任务内容2.1 设计背景随着计算机在社会生活深红越来越深入而广泛的应用,在文件中有些文件需要改动,比如插入,替换,删除等一系列操作,为了更好的修改文件,不得不进行一系列的操作来修改,因此,文件的修改操作是十分重要的。

C语言课课程设计word版

C语言课课程设计word版

C语言课课程设计word版一、教学目标本节课的教学目标是使学生掌握C语言的基本语法、数据类型、运算符、控制结构等基础知识,培养学生编写简单C程序的能力,提高学生对计算机编程的兴趣和热情。

具体来说,知识目标包括:1.了解C语言的发展历程和特点。

2.掌握C语言的基本语法和编程规范。

3.熟悉常用的数据类型、运算符和控制结构。

技能目标包括:1.能够使用C语言编写简单的程序,解决实际问题。

2.具备调试和运行C程序的基本技能。

3.能够阅读和理解C语言的代码。

情感态度价值观目标包括:1.培养学生对计算机编程的兴趣和热情。

2.培养学生勇于探索、积极思考的科学精神。

3.培养学生团队协作、互相帮助的良好品质。

二、教学内容本节课的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等基础知识。

具体安排如下:1.C语言概述:介绍C语言的发展历程、特点和应用领域。

2.基本语法:讲解C语言的基本语法规则,包括变量声明、函数定义等。

3.数据类型:介绍C语言中的基本数据类型,如整型、浮点型、字符型等。

4.运算符:讲解C语言中的算术运算符、关系运算符、逻辑运算符等。

5.控制结构:介绍C语言中的顺序结构、分支结构和循环结构。

为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。

1.讲授法:教师通过讲解、示范等方式,向学生传授C语言的基本知识和技能。

2.讨论法:引导学生分组讨论编程问题,培养学生的团队协作能力和解决问题的能力。

3.案例分析法:分析典型的C程序案例,使学生更好地理解C语言的语法和编程思想。

4.实验法:安排课堂实验,让学生亲自动手编写C程序,提高学生的实践能力。

四、教学资源为了支持教学内容和教学方法的实施,本节课将采用以下教学资源:1.教材:《C程序设计语言》(K&R)或《C语言入门教程》等。

2.参考书:《C Primer Plus》、《C语言编程思想》等。

3.多媒体资料:PPT课件、视频教程、在线编程练习平台等。

大一c语言程序课程设计

大一c语言程序课程设计

大一c语言程序课程设计一、课程目标知识目标:1. 理解C语言程序设计的基本概念,掌握数据类型、变量、运算符、表达式等基础知识;2. 学会使用顺序结构、分支结构、循环结构进行程序设计;3. 掌握数组和函数的使用,理解指针的概念及其应用;4. 了解结构体、联合体和枚举类型的使用。

技能目标:1. 能够运用C语言编写简单的程序,解决问题;2. 能够分析问题,运用逻辑思维进行程序设计;3. 能够阅读和理解他人编写的C语言程序;4. 能够对程序进行调试和优化,提高程序效率。

情感态度价值观目标:1. 培养学生的编程兴趣,激发学习积极性;2. 培养学生的团队合作意识,学会与他人共同解决问题;3. 培养学生的创新精神,敢于尝试新思路和方法;4. 培养学生严谨的学术态度,遵循编程规范。

课程性质:本课程为大一C语言程序设计的基础课程,旨在使学生掌握C语言的基本知识和编程技能,为后续专业课程打下坚实基础。

学生特点:大一学生刚接触编程,对编程知识有一定好奇心,但缺乏实际操作经验。

教学要求:结合学生特点,注重理论与实践相结合,通过案例分析和实际操作,使学生熟练掌握C语言编程技巧。

在教学过程中,注重培养学生的编程兴趣和创新能力,提高学生分析问题和解决问题的能力。

将课程目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. C语言概述:介绍C语言的发展历程、特点和应用领域,理解编程的基本概念。

相关教材章节:第一章2. 数据类型与运算符:讲解基本数据类型、变量定义、常量声明,运算符及其优先级。

相关教材章节:第二章3. 顺序结构程序设计:学习基本输入输出函数,编写简单的顺序结构程序。

相关教材章节:第三章4. 分支结构程序设计:介绍if语句、switch语句,学会编写分支结构程序。

相关教材章节:第四章5. 循环结构程序设计:讲解for循环、while循环、do-while循环,掌握循环结构编程。

相关教材章节:第五章6. 数组:介绍一维数组、二维数组的使用,学会存储和操作批量数据。

C语言课程教案

C语言课程教案

C语言课程教案一、教学目标1.理解C语言的概述、特点及发展历程。

2.掌握C语言的编程环境搭建和基本语法。

3.培养学生运用C语言解决实际问题的能力。

二、教学内容1.C语言概述2.C语言的编程环境搭建3.C语言的基本语法4.C语言程序设计实例三、教学过程1.导入(1)介绍C语言的概述、特点及发展历程。

C语言是一种面向过程的编程语言,它于1972年由美国贝尔实验室的DennisRitchie设计。

C语言具有简洁、高效、可移植性强等特点,是计算机程序设计的基础。

C语言的发展历程经历了多个版本,目前常用的有C89、C99和C11等。

(2)引导学生思考C语言在实际应用中的广泛性。

C语言广泛应用于操作系统、嵌入式系统、网络编程等领域,是许多现代编程语言的基础,如C++、Java、C等。

2.C语言的编程环境搭建(1)介绍C语言的编程环境。

C语言的编程环境主要包括编译器、调试器和集成开发环境(IDE)。

常用的编译器有GCC、MinGW等,调试器有GDB,集成开发环境有VisualStudio、Code::Blocks等。

(2)演示如何搭建C语言的编程环境。

以Windows系统为例,演示如何和安装MinGW编译器和Code::BlocksIDE,并创建一个简单的C语言项目。

3.C语言的基本语法(1)介绍C语言的基本语法。

1)变量:变量是用于存储数据的标识符,如inta;。

2)数据类型:C语言的数据类型包括基本类型、构造类型和指针类型等。

基本类型有int、char、float等。

3)运算符:C语言的运算符包括算术运算符、关系运算符、逻辑运算符等。

4)控制结构:C语言的控制结构包括顺序结构、分支结构和循环结构。

5)函数:函数是C语言程序的基本模块,用于实现特定的功能。

(2)通过实例讲解C语言的基本语法。

cinclude<stdio.h>intmn(){inta,b;a=10;b=20;printf("a+b=%d\n",a+b);return0;}4.C语言程序设计实例(1)讲解一个简单的C语言程序设计实例。

c语言课程设计带解析

c语言课程设计带解析

c语言课程设计带解析一、教学目标本课程旨在通过C语言的学习,使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生具备基本的编程能力,能够编写简单的C语言程序。

同时,通过编程实践,培养学生的逻辑思维能力、问题解决能力和创新意识。

此外,通过课程的学习,使学生了解计算机编程的基本原理和方法,培养学生对计算机科学的兴趣和热情。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识。

具体包括以下几个方面:1.C语言的基本语法和规则,如变量声明、数据类型、运算符、表达式等。

2.控制结构,如条件语句、循环语句等。

3.函数的定义和调用,包括主函数、用户自定义函数等。

4.基本的数据结构,如数组、字符串等。

5.指针的概念和应用。

6.结构体和文件操作等高级内容。

三、教学方法本课程采用讲授法、实践法、讨论法等多种教学方法相结合。

在教学过程中,教师将理论知识与实际编程案例相结合,通过生动的讲解和示例,帮助学生理解和掌握C语言的基本语法和编程方法。

同时,通过上机实践和编程作业,使学生能够将所学的知识应用于实际编程中,提高编程能力。

此外,鼓励学生之间的讨论和合作,培养学生的团队协作能力和问题解决能力。

四、教学资源为了保证本课程的顺利进行,需要准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C语言 Primer》等。

2.参考书籍:提供一些相关的参考书籍,如《C专家编程》、《C陷阱与缺陷》等,供学生自主学习参考。

3.在线资源:提供一些在线编程平台和资源,如LeetCode、Codeforces等,供学生进行编程练习和挑战。

4.实验设备:提供计算机实验室,让学生能够进行上机实践和编程实验。

以上是对本课程的教学目标、教学内容、教学方法和教学资源的详细设计。

希望通过这些设计,能够帮助学生更好地学习和掌握C语言,培养学生的编程能力和计算机科学素养。

c语言课程设计报告

c语言课程设计报告

c语言课程设计报告c语言课程设计报告在现在社会,我们都不可避免地要接触到报告,报告成为了一种新兴产业。

那么报告应该怎么写才合适呢?以下是店铺收集整理的c语言课程设计报告,欢迎阅读与收藏。

c语言课程设计报告11、题目要求◆ 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、居住街道、省份、城市、电子邮箱等;◆ 能够提供添加、删除和修改通讯录信息的功能;◆ 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;◆ 将通讯录保存在文件中;◆ 能够按表格方式输出通讯录信息。

2、需求分析本程序将用到文件系统,其中单行内容代表一张纸条。

程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。

3、总体设计根据项目的任务要求及以上分析,在设计方法上,采用模块化的程序设计思想,即将通讯录管理系统划分为数据输入模块,数据查询模块,数据修改模块,数据插入模块,数据删除模块,,并对每个模块按照其功能分别独立完成对应的程序设计。

在数据处理上,各模块中的数据处理(如数据读/写操作)均用文件形式来实施,并在主程序中完成操作界面的设计功能,设计思路如下:1、采用模块设计思想;2、将通讯录信息定义成结构体类型,并通过文件实施数据操作;3、通过设计一菜单界面完成具体操作。

4、详细设计c语言课程设计报告2一、传统C语言课程设计教学模式C语言是最基本的计算机编程,是计算机、电子信息类等相关专业学生的专业入门课,在其学习过程中,要求必须掌握编程的技能。

但是C语言的学习有其特点,规则比较多、知识点多,涉及到的编程程序等也比较难懂,在运行上代码的要求较高,程序执行效率高,因此更讲究教学和学习的方式方法,但是在我们的教学中,目前教学方法比较单一,随着信息化的发展,传统的教学模式已经无法适应,亟需改革。

C语言实现文本编辑器

C语言实现文本编辑器

C语言实现文本编辑器本文将介绍使用C语言实现一个简单的文本编辑器的基本原理和实现步骤。

通过此编辑器,用户可以打开、编辑、保存和关闭文本文件,并且具备基本的文本编辑功能,如插入、删除、查找和替换文本等。

一、编辑器界面设计为了实现一个简单易用的文本编辑器,我们可以设计一个基于命令行界面的编辑器。

用户可以通过文本命令来操作编辑器,从而实现基本的编辑功能。

二、文件的打开和保存在C语言中,我们可以使用标准文件操作函数来实现文件的打开和保存。

用户可以通过指定文件路径来打开或保存文件。

打开文件时,程序会读取文件内容,并将其显示在编辑器界面中;保存文件时,程序会将编辑器内的文本内容写入目标文件中。

三、基本文本编辑功能1. 插入文本用户可以使用插入命令将文本内容插入到当前光标位置之前或之后。

程序会根据插入位置的不同,调整光标的位置,并显示插入后的文本内容。

2. 删除文本用户可以使用删除命令删除当前光标位置处的文本内容。

程序会删除光标所在位置的字符,并相应地调整文本的显示和光标的位置。

3. 搜索文本用户可以使用搜索命令来查找特定的文本内容。

程序会从当前光标位置开始搜索,并根据搜索结果将光标移动到匹配文本的位置。

4. 替换文本用户可以使用替换命令将指定的文本内容替换为新的内容。

程序会搜索文本中的所有匹配项,并将其替换为新的内容。

四、其他功能扩展除了基本的文本编辑功能外,我们还可以对编辑器进行功能扩展,以提升用户体验和编辑效率。

一些可能的扩展功能包括:1. 撤销和重做功能:允许用户撤销和重做操作,以便回退或恢复文本编辑的历史记录。

2. 多窗口编辑:支持同时打开和编辑多个文本文件的功能,提供多窗口切换和管理。

3. 自动保存与恢复:定时自动保存编辑的文本内容,并在下次启动时自动恢复上次编辑的状态。

4. 语法高亮:根据文本类型,对关键字、注释、字符串等进行特殊标记显示,提升代码可读性。

五、总结通过使用C语言,我们可以实现一个简单但功能完善的文本编辑器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

扬州大学编译原理课程设计报告题目简单的编译器班级计科0802班学号081202427姓名张俊指导教师姜卯生成绩扬州大学信息工程学院2011年6月10日一、课程设计题目实现一个简单的编译器二、课程设计目的通过编译原理课程设计,加深对课堂中所讲授的内容的理解,设计一个具有词法分析、语法、语义分析、错误处理的综合程序。

进一步掌握编译程序常用实现的方法和技术,使学生初步具有研究、设计、编制和调试编译程序的能力。

三、课程设计要求1.实现一个C语言子集或Pascal语言子集的编译器,工具任选。

2.要求实现的功能:翻译 +,-,*, / 四则运算表达式及布尔表达式,翻译包含if语句,while语句及do-while语句及相互间的嵌套。

四、课程设计语言及选用工具选用语言:Java工具 Eclipse五、课程设计方法设计过程中用到的数据结构://关键字数组public static List<Eryuanshi> keyWord= new ArrayList<Eryuanshi>();//自定义符号串数组p ublic static Eryuanshi[] valueAndClass = new Eryuanshi[100];//目标代码数组public static List<Siyuanshi> siyuanshi= new ArrayList<Siyuanshi>();//目标代码类,存放四元式的另外一种形式class Siyuanshi{String op;String str1;String str2;}//二元式类,存放词法分析后的标志符,关键字及其类号class Eryuanshi{String word;int classID;}Stack<Integer> stateStack = new Stack<Integer>(); //状态栈Stack<String> symStack = new Stack<String>(); //符号栈Stack<String> semanticStack = new Stack<String>(); //语义栈编译器主要分为两个模块:(1)词法分析程序:主要功能是从文件逐个单词读取源程序,进行次词法分析,并输出源程序的二元式列表,二元式列表保存在keyWord对象数组中。

关键字、自定义标识符和数字对应的类号列表+ 3 || 15 int 27- 4 = 16 float 28* 5 ( 17 char 29/ 6 ) 18 if 30< 7 [ 19 else 31<= 8 ] 20 while 32== 9 { 21 do 33!= 10 } 22 main 34> 11 : 23 !35>= 12 ;24 数字 2& 13 , 25 自定义1标识符&& 14 void 265空格13字母72非字母或数字字母或数字数字4数字或小数点(并设置小数点的标记数)非数字6+-其他.......主要函数:1、wordAnalys(String s):对源代码进行词法分析,在其中调用lookup ()函数。

2、lookup(String s):对词法分析函数中分析出的各字符串在关键字和符号 表中查找。

(2)语法分析及生成目标代码程序:采用LR表分析程序,LR表具有ACTION和GOTO 两部分。

主要采用两个LR分析表:算术表达式LR表和布尔表达LR表。

根据查询LR表,判断所要采取的动作。

若得到值temp=-1,则表达式识别错误,若temp=0,则表达式识别成功,若0<temp<100,则转相应z状态,若temp>=100,则采取用对应表达式归约。

算术表达式文法:0) S→E1) E→E+E2)E→E--E3) E→E*E4)E→E/E5) E→(E)6) E→i根据算术表达式文法构造算术表达式LR分析表:int[][] E_LR = new int[][]{{ -1, -1, 2, -1, 3, -1, 1},{ 4, 5, -1, -1, -1, 0, -1},{ -1, -1, 2, -1, 3, -1, 6},{104,104, -1,104, -1,104, -1},{ -1, -1, 2, -1, 3, -1, 7},{ -1, -1, 2, -1, 3, -1, 8},{ 4, 5, -1, 9, -1, -1, -1},{101, 5, -1,101, -1,101, -1},{102,102, -1,102, -1,102, -1},{103,103, -1,103, -1,103, -1}};布尔表达式文法:0)E→i1)E→i r i2)E→(E)3)E→!E4)A→E&&5)E→AE6)O→E||7)E→OE布尔表达式LR分析表:int[][] EB_LR = new int[][]{{ 1, 1, 4, -1, 5, -1, -1, -1, 13, 7, 8},{ -1, 2, -1,101, -1,101,101,101, -1, -1, -1},{ 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},{ -1, -1, -1,102, -1,102,102,102, -1, -1, -1},{ 1, -1, 4, -1, 5, -1, -1, -1, 11, 7, 8},{ 1, -1, 4, -1, 5, -1, -1, -1, 6, 7, 8},{ -1, -1, -1,104, -1,104,104,104, -1, -1, -1},{ 1, -1, 4, -1, 5, -1, -1, -1, 14, 7, 8},{ 1, -1, 4, -1, 5, -1, -1, -1, 15, 7, 8},{105, -1,105, -1,105, -1, -1, -1, -1, -1, -1},{107, -1,107, -1,107, -1, -1, -1, -1, -1, -1},{ -1, -1, -1, 12, -1, 9, 10, -1, -1, -1, -1},{ -1, -1, -1,103, -1,103,103,103, -1, -1, -1},{ -1, -1, -1, -1, -1, 9, 10, 0, -1, -1, -1},{ -1, -1, -1,106, -1,106,106,106, -1, -1, -1},{ -1, -1, -1,108, -1, 9,108,108, -1, -1, -1}};主要函数:1、public static void readAndAnalysis():对得到的关键语句进行分析。

2、public static int ifAnalysis():对if语句进行分析。

3、public static int whileAnalysis():对while语句进行分析。

4、public static int doAnalysis():对do-while语句进行分析。

5、public static int E():对算术表达式采用LR分析法进行语法分析,在其中调用codeGen()函数,并采用语法制导直接产生相应的目标代码,6、public static int EB()::对布尔表达式采用LR分析法进行语法分析,在其中调用codeGen()函数在布尔表达式中可能嵌套算术表达式,此时要调用E()函数进行分析,并采用语法制导直接产生目标代码。

7、public static void codeGen(String op,String str1,Stringstr2,String str3):产生目标代码8、public static String merge(String str1,String str2): 并链。

六.课程设计体会本课程设计是一个编译器的设计,包括词法分析部分、语法分析部分、和目标代码生成。

词法分析是编译的基础,执行词法分析的程序称为词法分析器,也就是说编译程序中完成词法分析任务段就是词法分析器。

语法分析部分为语法分析器的设计,采用LR(1)分析方法进行语法分析,判断给出的符号串是否为该文法识别的句子,是否符合if、while等的语法规则。

目标代码是利用语法制导直接生成的。

通过此次课程设计,我对编译原理课程的整个内容有了较深的理解,对实现简易编译器的整个过程有了清晰的认识,总的来说,很好的将理论和实践联系起来。

在整个设计过程中,最大的收获就是切身体会了编程语言在具体分析方法下进行翻译的实现机制和步骤.其次是对简单优先分析方法的理解和运用以及对堆栈的操作原理的掌握。

因为之前学理论的时候,感觉和实际的编程语言联系不是很大,也不知道所学理论如何在语句的翻译过程中发挥作用.而在具体语句翻译的设计实践过程中,才真正体会了该步骤是如何一步步实现的,这些都是以往单纯理论知识学习所感触不到的.在翻译布尔表达式的过程和翻译if、else,while,do- while语句的过程中,遇到了一些编程方面的困难,并且翻译布尔表达式也是编译器实现过程中最复杂的一部分,在调试的时候也出现了问题,而且经常会出现无限循环的情况,这是因为嵌套的方面没有调试好,但是还好有DeBug,一步一步终于调试好了,感觉编程能力还是要一步一步来,总是看书是不行的,要学会敲代码,要动手,这样才能一步步的提高,自己以后一定要勤加练习,代码量多才是王道啊!七.实验结果与分析源代码:词法分析:目标代码生成:整个编辑器界面:八.部分源代码算术表达式分析:public static int E(int tempcol){int entry = tempcol;Stack<Integer> stateStack = new Stack<Integer>(); //状态栈Stack<String>symStack = new Stack<String>(); //符号栈Stack<String> semanticStack = new Stack<String>(); //语义栈String analyceString = new String("");String E_Place = new String("");String E1_Place = new String("");String E2_Place = new String("");String symbol = new String("");tempcol+=2;//不等于";","<","<=","==","!=",">",">=","&","&&","||"while(valueAndClass[tempcol].getClassID() != 24 && valueAndClass[tempcol].getClassID() != 7 &&valueAndClass[tempcol].getClassID() != 8 &&valueAndClass[tempcol].getClassID() != 9 &&valueAndClass[tempcol].getClassID() != 10 &&valueAndClass[tempcol].getClassID() != 11 &&valueAndClass[tempcol].getClassID() != 12 &&valueAndClass[tempcol].getClassID() != 13 &&valueAndClass[tempcol].getClassID() != 14 &&valueAndClass[tempcol].getClassID() != 15){//等于变量或者数字if(valueAndClass[tempcol].getClassID() == 1 ||valueAndClass[tempcol].getClassID() == 2)analyceString += "i";//等于 "+","-"else if(valueAndClass[tempcol].getClassID() ==3 || valueAndClass[tempcol].getClassID() == 4)analyceString += "+";//等于 "*","/"else if(valueAndClass[tempcol].getClassID() ==5 || valueAndClass[tempcol].getClassID() == 6)analyceString += "*";elseanalyceString += valueAndClass[tempcol].getWord();tempcol++;}analyceString += "#";char[] analyceChar = analyceString.toCharArray();stateStack.push(0);symStack.push("#");int loc;for(int i = 0; i < analyceChar.length; i++){int temp = 0;for(loc = 0; loc < 7; loc++)if(analyceChar[i] == sym[loc]){temp = E_LR[stateStack.peek()][loc];break;}switch(temp){case -1:{System.out.printf("error position: %d",i).println();System.exit(0);}case 0:{System.out.println("Analysis Successful!!!");}case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:{stateStack.push(temp);symStack.push(String.valueOf(analyceChar[i]));semanticStack.push(valueAndClass[entry+2+i].getWord());break;}case 101:{ //E->E+E E->E-EstateStack.pop();stateStack.pop();stateStack.pop();symStack.pop();symStack.pop();symStack.pop();E1_Place = semanticStack.pop();symbol = semanticStack.pop();E2_Place = semanticStack.pop();E_Place = newTemp();codeGen(symbol,E1_Place,E2_Place,E_Place);symStack.push("E");stateStack.push(E_LR[stateStack.peek()][6]);semanticStack.push(E_Place);i--;break;}case 102:{ //E->E*E E->E/EstateStack.pop();stateStack.pop();stateStack.pop();symStack.pop();symStack.pop();symStack.pop();E1_Place = semanticStack.pop();symbol = semanticStack.pop();E2_Place = semanticStack.pop();E_Place = newTemp();codeGen(symbol,E1_Place,E2_Place,E_Place);symStack.push("E");stateStack.push(E_LR[stateStack.peek()][6]);semanticStack.push(E_Place);i--;break;}case 103:{ //E->(E)stateStack.pop();stateStack.pop();stateStack.pop();symStack.pop();symStack.pop();symStack.pop();semanticStack.pop();E1_Place = semanticStack.pop();semanticStack.pop();symStack.push("E");stateStack.push(E_LR[stateStack.peek()][6]);semanticStack.push(E1_Place);i--;break;}case 104:{ //E->istateStack.pop();symStack.pop();symStack.push("E");stateStack.push(E_LR[stateStack.peek()][6]);E_Place = semanticStack.peek();i--;break;}}}codeGen("=",valueAndClass[entry].getWord(),"_",E_Place);return tempcol;}。

相关文档
最新文档