1、6)概念图工具 Keystone ConceptMap v3.74 - 俺下载我个人觉得1)比较好用,文件小,也是汉化版的,是初学者的最佳选择,更是英语不好的人的选择。而其他的软件很大,不易懂。7.选择一款你认为比较优秀的概念图软件,给出概念图体会编译器的功能理解编译器的功能例举你所使用过的编译器,并从中选择一个最熟悉的,写出从编写到运行一个应用程序的全过程。1 实验目的:编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源代
2、码一般为高阶语言 (High-level language), 如 Pascal、C+、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)2.实验内容:目前我学过的编译器主要有visual c+ 6.0、C#、Masm5.0、6.15,主要操作:源代码 (source code) 预处理器 (preprocessor) 编译器 (compiler) 汇编程序 (assembler) 目标代码 (object code) 连接器 (Linker) 可执行程序 (executables)编译是从源代码(通常为高阶语言)
3、到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。程序清单如下:/ 交换两个数.cpp : 定义控制台应用程序的入口点。#include stdafx.hiostreamusing namespace std;class exchangeprivate: intx,y;public: void ex() coutx;请输入y的值:y; int temp; temp=x; x=y; y=temp;x=x y=y ;exchangeexcint _tmain() exc.ex(); return 0;绘制编译原理课程学习概念图学会利用概念图复制和巩固本课程中所讲授的知识
4、编译原理课程每个章节的内容讲解完之后,根据自己的理解为其绘制学习概念图每章课程结束后一周3第一章:如下图第三章:正则表达式的使用1.实验目的:体会正则表达式的使用设计一个Windows窗体用于填写个人资料,出生日期自动从身份证号码中提取,在提交时检查以下内容:(检查不合格时弹出消息框提)1) 检查用户名是否由6-18个字符组成,组成用户名的字符只能是英文大小写字母、数字、下划线;2) 检查真实姓名是否由2-4个汉字组成;3) 检查Email格式;4) 检查电话号码是否由11个数字(手机号)或8位数字(固定电话)或区号加固定电话号码组成;5) 检查邮政编码是否由6位数字组成;6) 检查身份证号码
5、是否符合18位数字。3.实验要求:实验平台说明,提交源程序代码和实验结果截图4.验收时间:第8周实验平台基于Microsoft Visual Studio 2010 官方中文旗舰版的编译器C#语言操作下并用Windows窗体完成的。1、下图是实验中的重要截图2、以下是实验代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows
6、.Forms;usingSystem.Text.RegularExpressions;namespacecomplierpublicpartialclassForm1 : FormpublicForm1()InitializeComponent();privatevoidbutton1_Click(objectsender, EventArgse)if (!Regex.IsMatch(this.textBox1.Text, a-zA-Zd_6,18)MessageBox.Show(用?户名?须?由6到18位?英文?大小?写字母?,数y字下?划?线?组成!);elseRegex.IsMatch(
7、this.textBox2.Text, u4e00-u9fa52,4真?实姓?2到4位?汉o字Regex.IsMatch(this.textBox3.Text, (d15$)|(d18$)|(d17(d|X|x)$)身份Y证有D误Regex.IsMatch(this.textBox4.Text, (?=.8,)(?=.*A-Z)(?=.*a-z)(?=.*0-9)(?=.*W).*$密码?为a强?if (textBox5.Text != textBox4.Text)两次不?一致?Regex.IsMatch(this.textBox6.Text, a-z0-9+(._-*a-z0-9)*(a-z
8、0-9+-a-z0-9*a-z0-9+.)1,63a-z0-9+$邮箱?格?式正y确Regex.IsMatch(this.textBox7.Text, (d11)|(d7,8)|(d4|d3)-(d7,8)$)电话号?Regex.IsMatch(this.textBox8.Text, (d6)编应|为a6位?privatevoidtextBox9_TextChanged(objectsender, EventArgse)trystringbirthday = ;stringsex = if (textBox3.Text.Length = 18)/处|理的从中D得到生日和性?别e代birthda
9、y = textBox3.Text.Substring(6, 4) + - + textBox3.Text.Substring(10, 2) + + textBox3.Text.Substring(12, 2);sex = textBox3.Text.Substring(14, 3);if (textBox3.Text.Length = 15)birthday = 19 + textBox3.Text.Substring(6, 2) + + textBox3.Text.Substring(8, 2) + + textBox3.Text.Substring(10, 2);sex = textBo
10、x3.Text.Substring(12, 3);textBox9.Text = birthday;catchreturn;privatevoidgroupBox1_Enter(objectsender, EventArgse)熟练掌握课程中涉及到的算法通过为算法绘制流程图达到对算法的深刻理解为课程各章节中出现的核心算法绘制程序流程图3.验收时间:每章节完成后1周3.如图:编写词法分析程序体会词法分析程序的工作原理和功能编写一个词法分析程序,实现的功能是:输入一个C语言程序,经该词法分析程序处理后,输出单词记号序列。提交程序清单(包含注释),提交输入一个C语言程序用词法分析程序处理后的运行结果
11、截图以及运行环境配置说明。4.验收时间:第12周(1)使用环境:windows下vc+6.0或vs2010(在vs2010里运行需要加#include这个头文件而vc+6.0里不要)(2)程序清单:#include #include#define MAX 22charch = string key15=begin,endifthenelsewhilewriteread,do, callconstcharuntilprocedurerepeatintIskey(string c) /关键字判断int i;for(i=0;iMAX;i+) if(pare(c)=0) return 1;return
12、 0;intIsLetter(char c) /判断是否为字母if(ca)|(c0c9) return 1;voidanalyse(FILE *fpin)stringarr=while(ch=fgetc(fpin)!=EOF) arr=if(ch=|ch=tn)else if(IsLetter(ch)while(IsLetter(ch)|IsDigit(ch) if(ch) ch=ch+32;arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);if (Iskey(arr)coutarrt$关键字else coutt$普通标识符else if(I
13、sDigit(ch)while(IsDigit(ch)|ch=.IsDigit(fgetc(fpin)coutt$无符号实数else switch(ch)case+:- :*/cht$运算符break;(),t$界符ch=fgetc(fpin);) cout=else coutbreak;)coutt$输入控制符else if(ch=t$输出控制符elsecoutdefault : coutin_fn;if(fpin=fopen(in_fn,r)!=NULL) break;文件路径错误!n*分析如下*analyse(fpin);fclose(fpin);按任意键结束int a;a;(3)截图:
14、熟悉YACC的使用方法了解YACC的使用方法 借助互联网查找YACC的使用方法,并撰写使用说明手册第16周、YACC定义:yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析方法。Yacc最初由AT&T的Steven C. Johnson为Unix操作系统开发,后来一些兼容的程序如Berkeley Yacc,GNU bison,MKS yacc和Abraxasyacc陆续出现。它们都在原先基础上做了少许改进或者增加,但是基本概念是相同的。由于所产生的解析器需要词法分析器配合,因此Yacc经常和词法分析器的产生器一般就是Lex联合使用。IEEE POSIX P1003.2 标准定义了
15、Lex和Yacc的功能和需求。、使用说明()yacc是一个语法分析程序的自动生成器。()yacc文件构成说明部分%规则部分%程序部分%与%是说明部分的起始符和与结束符。终端和非终端符号终端符号:代表一类在语法结构上等效的标记。终端符号有三种类型:命名标记:这些由 %token 标识符来定义。按照惯例,它们都是大写。字符标记:字符常量的写法与 C 相同。例如, - 就是一个字符标记。字符串标记:写法与 C 的字符串常量相同。例如, 就是一个字符串标记。lexer返回命名标记。非终端符号:是一组非终端符号和终端符号组成的符号。按照惯例,它们都是小写。终端符号的书写方式%token tname1 t
16、name2.tname1,tname2都分别表示不同的终端符号。%token tname1 integer1integer1表示终端符号tname1的内部编码值。当选用第一种方式时,当终结符为名字时,其编码值由257开始。并按先后顺序,增量为1。文字符号的编号就是其在符号表中的数值。当按第二种方式时,终结符的编码由用户指定。()union的定义和类型定义利用union的定义和类型定义,就可以使yacc提供其他类型的返回值。具体做法是在说明部分给出一个union的定义,使其包括所期望的数据类型。在类型定义节里,对每个具有这种特殊要求的终结符或者非终结符与union中所定义的成员名进行相互搭配。%
17、unioninttype_type;charchar_type; QTREE *tree_type;%type IStree_typetlist()结合性与优先级优先级与结合性定义由下面的形式给出关键字1 终结符表1关键字2 终结符表2其中关键字用来定义跟在它后边的终结符号的结合性%left 定义跟在它后面的终结符为左结合。%right 定义跟在它后面的终结符为右结合。%nonassoc定义跟在它后面的终结符无结合性。终结符优先级定义由行序来确定。1 由同一关键字引出的,出现在同一行的终结符具有相同的优先级。2 后行的优先级总是高于前行。测试一个完整的编译器前端程序理清编译器前段程序各阶段的程序实现思路 将教材394页中给出的一个完整的编译器前端,加以调试和验证 提交源程序代码和执行结果评测图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1