系统软件开发实践报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院
系统软件开发实践报告
姓名:王冬升
学号:08123228
专业:计算机科学与技术
班级:计科12-1班
指导教师:张博
2015年 4月
摘要
操作系统和编译原理是大学计算机专业的必修课程。在这些课程的教学教程中,容易偏重于理论的介绍,而忽视了实践环节。
本课程设计是在完成C++程序设计、数据结构、操作系统、编译技术教学后所进行的,全面综合训练学生的系统软件开发能力
关键字:编译系统、Flex、Bison、操作系统、启动、内存管理
目录
1 借助Flex进行词法分析 (2)
实验内容 (2)
实验要求 (2)
程序代码 (2)
实验结果 (4)
2 借助Flex/Bison进行语法分析 (5)
实验内容 (5)
实验要求 (5)
程序代码 (5)
实验步骤 (5)
实验结果 (7)
3 Flex/Bison综合实验 (7)
实验内容 (7)
计算器具体需要实现的功能 (7)
实验要求 (7)
3,4 程序代码 (8)
实验结果 (11)
4(操作系统实验)lib0:熟悉实验环境 (11)
实验目的 (11)
实验环境搭建 (11)
GCC编译练习 (12)
GDB调试练习 (12)
5(操作系统实验)lib1:启动操作系统 (13)
实验目的 (13)
实验内容 (14)
实验步骤 (14)
操作系统启动过程 (15)
实模式与保护模式 (16)
6(操作系统实验)lib2:物理内存管理 (16)
实验目的 (16)
实验内容 (16)
………………………………………………………………
7实验体会……………………………………………………………………8参考文献……………………………………………………………………
1借助Flex进行词法分析
实验内容
给定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语言符号/* . . . */围起来。注释可以放在任何空白出现的位置(即
注释不能放在标记内)上,且可以超过一行。注释不能嵌套
实验要求
编写 LEX 源文件,实现C 语言子集的词法分析功能,最后上机调试。
要求编写一个测试程序,以给定的测试文件作为输入,输出运行结果到输出文件中
程序代码
源码:
%{
#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 infilename[100];
printf("输入文件名:");
scanf("%s",infilename);
yyin = fopen(infilename,"r");
yyout = fopen("out","w");
yylex();
return 0;
}
测试程序:
#include
using namespace std;
int main() {