系统软件开发实践报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院
系统软件开发实践报告
姓名:王冬升
学号:08123228
专业:计算机科学与技术
班级:计科12-1班
指导教师:张博
2015年 4月
摘要
操作系统和编译原理是大学计算机专业的必修课程。在这些课程的教学教程中,容易偏重于理论的介绍,而忽视了实践环节。
本课程设计是在完成C++程序设计、数据结构、操作系统、编译技术教学后所进行的,全面综合训练学生的系统软件开发能力
关键字:编译系统、Flex、Bison、操作系统、启动、内存管理
目录
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)
5(操作系统实验)lib1:启动操作系统 (13)
5.1 实验目的 (13)
5.2 实验内容 (14)
5.3 实验步骤 (14)
5.4 操作系统启动过程 (15)
5.5 实模式与保护模式 (16)
6(操作系统实验)lib2:物理内存管理 (16)
6.1 实验目的 (16)
6.2 实验内容 (16)
6.3 ………………………………………………………………
7实验体会……………………………………………………………………
8参考文献……………………………………………………………………
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]
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 in[100];
printf("输入文件名:");
scanf("%s",in);
yyin = fopen(in,"r");
yyout = fopen("out","w");
yylex();
return 0;
}
测试程序:1-1.cpp
#include
using namespace std;