(完整版)系统软件开发实践报告

  • 格式:doc
  • 大小:1019.29 KB
  • 文档页数:19

下载文档原格式

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

计算机科学与技术学院

系统软件开发实践报告

*名:***

学号:********

专业:计算机科学与技术

班级:计科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 infilename[100];

printf("输入文件名:");

scanf("%s",infilename);

yyin = fopen(infilename,"r");

yyout = fopen("out","w");

yylex();

return 0;

}

测试程序:1-1.cpp

#include

using namespace std;