(完整版)系统软件开发实践报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院
系统软件开发实践报告
王冬升姓名:08123228 号:学业:专计算机科学与技术
级:班计科12-1 班博指导教师:张
月
2015 4年
摘要
操作系统和编译原理是大学计算机专业的必修课程。在这些课程的教学教程中,容易偏重于理论的介绍,而忽视了实践环节。
本课程设计是在完成C++程序设计、数据结构、操作系统、编译技术教学后所进行的,全面综合训练学生的系统软件开发能力
关键字:编译系统、Flex、Bison、操作系统、启动、内存管理
计算机科学与技术学院系统软件开发实践报告第1页目录
1 借助Flex进行词法分析 (2)
1.1实验内容 (2)
1.2 实验要求 (2)
1.3 程序代码 (2)
1.4 实验结果 (4)
2 借助Flex/Bison进行语法分析 (5)
2.1 实验内容 (5)
2.2 实验要求 (5)
2.3 程序代码 (5)
2.4 实验步骤 (5)
2.5 实验结果 (7)
3 Flex/Bison综合实验 (7)
3.1 实验内容 (7)
3.2 计算器具体需要实现的功能 (7)
3.3 实验要求 (7)
3,4 程序代码 (8)
3.5 实验结果 (11)
4(操作系统实验)lib0:熟悉实验环境 (11)
4.1 实验目的 (11)
4.2 实验环境搭建 (11)
4.3 GCC编译练习 (12)
4.4 GDB调试练习 (12)
13 …………………………………:启动操作系统 5(操作系统实验)
lib113 ………………………………………………………………5.1 实验目的14 ………………………………………………………………5.2 实验内容
14 ………………………………………………………………5.3 实验步骤
15 ……………………………………………………5.4 操作系统启动过程
16 ……………………………………………………5.5 实模式与保护模式
16 …………………………………:物理内存管理 6(操作系统实验)
lib216 ………………………………………………………………6.1 实验目的16 ……………………………………………………………… 6.2 实验内容………………………………………………………………6.3
实验体会……………………………………………………………………
7 ……………………………………………………………………参考文献8
计算机科学与技术学院系统软件开发实践报告第2页1借助Flex进行词法分析
1.1实验内容
给定C语言的一个子集,具体内容如下:
1. 下面是语言的关键字:
else if switch for int float return void while 所有的关键字都是保留字,并且必须是小写。
2. 下面是专用符号:
+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */
3. 其他标记是标识符(ID)和数字(NU ),通过下列正则表达式定义:
ID = letter letter*
NUM = digit digit*
letter = a|..|z|A|..|Z
digit = 0|..|9
注:小写和大写字母是有区别的。
4. 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM 关键字。
5. 注释用通常的C语言符号/* . . . */围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套
1.2实验要求
编写 LEX 源文件,实现C 语言子集的词法分析功能,最后上机调试。
要求编写一个测试程序,以给定的测试文件作为输入,输出运行结果到输出文件中
1.3程序代码
Lex.l源码:
%{
#include
#include
#include
int yywrap();
int lineno=1;
%}
delim [ \t]
ws {delim}+
letter [A-Za-z]
digit [0-9]
计算机科学与技术学院系统软件开发实践报告第3页id {letter}+
number {digit}+
enter [ \n]
spchar
尨屻屼屽屼屛屼屝屼尨屼尩屼尻屼尽屼尬屼尫屼尭屼尪屼?籜?籜?尽屼尾屼?籜?尽屼!=)
comment \/\*(\*[^/]|[^*])*\*\/
kwd (else|if|switch|for|int|float|return|void|while)
%%
{ws} {}
{comment} {}
{enter} {lineno++;}
{kwd} {fprintf(yyout,%d行\tkeywod\t%s\n,lineno,yytext);} {spchar} {fprintf(yyout,%d行\tspchar\t%s\n,lineno,yytext);}
{id} {fprintf(yyout,%d行\tidenti\t%s\n,lineno,yytext);} {number} {fprintf(yyout,%d行\tnumber\t%s\n,lineno,yytext);}.
%%
int yywrap() {return 1;}
int main(void)
{
char infilename[100];
牰湩晴尨输入文件名: );
scanf(%s,infilename);
yyin = fopen(infilename,
);
yyout = fopen(out,w);
yylex();
return 0;
}
1-1.cpp
测试程序:#include
using namespace std;
计算机科学与技术学院系统软件开发实践报告第4页int main() {
int a;
int d=123456;
float b=123.45;
int e=9;