编译原理课程设计:构建高效编译器_第1页
编译原理课程设计:构建高效编译器_第2页
编译原理课程设计:构建高效编译器_第3页
编译原理课程设计:构建高效编译器_第4页
编译原理课程设计:构建高效编译器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023

《编译原理》课程上机汇报

专业:软件工程

班级:14级1班CompilerasaService

学号:

Compiler

姓名:

指导老师:

目录

一、课程设计的目的....................................................5

二、课程设计的规定...................................................6

三、课程设计的内容....................................................8

四、总体设计方案及详细设计...........................................9

五、诃法分析器的构造环节:...........................................11

六、测试实例:.......................................................12

七、测试成果:.......................................................14

八、源程序代码.......................................................15

一、课程设计日勺目的

编译原理课程兼有很强口勺理论性和实践性,是计算机专业的一门非常重要的专业

基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修

课。为了让学生可以更好地掌握编译原理的基本理论和编译程序构造的基本措施

和技巧,融会贯穿本课程所学专业理论知识,提高他们的软件设计能力,特设定

该课程日勺课程设计,通过设计一种简朴的JC语言的编译程序,提高学生设计程序

的能力,加深对编译理论知识

二、课程设计的规定

1、明确课程设计任务,复习编译理论知识,查阅复印有关日勺编译资料。

2、按规定完毕课程设计内容,课程设计汇报规定文字和图表工整、思绪清晰、

算法正

确。

3、写出完整的算法框架。4、编写完整的编译程序

三、课程设计的内容

课程设计是一项综合性实践环节,是对平时试验H勺一种补充,课程设计内

容包括课程日勺重要理论知识,但由于编译的知识量较复杂并且综合性较强,因而

对一种完整日勺编译程序不适合平时试验。通过课程设计可以抵达综合设计编译程

序的目日勺。本课程日勺课程设计规定学生编写一种完整的编译程序,包括词法分析

器、语法分析器以及实现对简朴程序设计语言中的逻辑运算体现式、算术运算体

现式、赋值语句、TF语句、While语句以及do…while语句进行编译,并生成中

间代码和直接生汇编指令的代码生成器。

四、总体设计方案及详细设计

总体设计方案:

1.总体模块

R-〒-MF■»H2X千«■*-3

:词法分析器*5.1解释福由实现方法

数绘图语言

■语法分刷C/C++编译器

解将器»

语义子程序

④手工编写

词法分析器

—川编译器卜一

生及:件)LEK函数绘图语言

语法器C/C++编译器■解释器

AYACC编译器*

11申y文件)

语义子程序,

⑥工具告成*

函数绘图语言函数绘图语言

A解释器A函数图形

*I源程序一

⑹解释器工作原理

-------■-----------

两种方法的语义部分基本相同,主要区别在于词法和语法分析器

的构造是手工完成还是借助于工具完成。

五、词法分析器日勺构造环节:

正规式一NFA—DFA—最小DFA一编写程序一测试

词法分析器的三个任务:

1滤掉原程序中的无用成分;

2输出记号供语法分析器使用;

3识别非法输入,并将其标识为“出错记号”。

六、测试实例:

5W(DMl)*AQ)IS®T®IACDWO出

向Q0%。-•二,CD|S?f铁|-

Wld口、,「呼!丁e|

iS0m'cpp=0Q

-■inc】g。“sgrRics.tr-

•inclitdp<«tdio.h>—

McFincNnx_CHf*S209

externvoidPdr»er(ch4r•SrcHlePtr);

HOChOC;

Char$rcniePdth(NAX_CHAKS);

staticclur--CiMipiler**;

〃----------------初始化西口由故声明

staticboolPrrpjrrWindow<HINSTANCE.HINSTftNCE.int);

〃----------------检查分双序文件是否合法西敛声明

staticboolChtckSrcrile(LrsiR);

//................窗口消且处姓函数声明

“MICLRFSULTCAIIBACKWndProc<HWND.UINT.UPARAH,IPARAH);

〃--------------------------------Window程序主由故

intAPIEHIRYVinH4iR(NlNSIAtCChlfistance,

MIHSTAtCChPrevIftStance,

•nern,4d・・CA

七、测试成果:

SFunctionPlot•MicrosoftVisualC*4(testtxt]

面文侬Bwai.1SXV)«A(DTS0侬t®IM(D■口也)»tt(H|

国cafQOEtefEC国音聃「Fl,

4*■■■■......................111■—!-*.

[fcxprNodeclassmember;寸网。mumberm・CrualuC/CnMemb?\*卓酉!©

_:LWORIGInIS(3S0v220);

豆£作区,FunctionPlof:rotis0;

scaleis(56.56);

-E&TunctionPlotfiles

H口SourceFiles

FORTFROM0TO2-PISTEPPI/500DRAW(COS(T)tsin(T));

[3]main.cpp

[ilparscr.cpp

固“jnner.cpp

LCompler

国semantic.cpp

S口HeaderFiles

fijparscr.h

sconncr.h

Blsemantics.!)

JResourceFiles

1)testtxt

♦_|ExternalDepend

,:Ch»S6V...]UFIIcVlcw「|4

--Confi

FiinctinnPInt-.AXP-fl0rrn

3Ii\扭建《调试'在文件i中

八、源程序代码

#include"semantics.h"

#include<stdio.h>

#defineMAX_CHARS200

externvoidParser(char:}:SrcFilePtr);

HDChDC;

charSrcFilePath[MAX_CHARS];

staticcharName[]="Compiler";

//■初始化窗口函数申明

staticboolPrcpareWindow(HlNSTANCE,HINSTANCE,int);

//-----------检查源程序文献与否合法函数申明

staticboolCheckSrcFile(LPSTR);

//-.........窗口消息处理函数申明

staticLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

//----------------Window程序主函数

intAPIENTRYWinMain(HINSTANCEhlnstance,

HINSTANCEhPrevInstance,

LPSTRIpCmdLine,

intnCmdShow)

〃保留源文献途径

strcpy(SrcFilePath,IpCmdLine);

〃初始化窗口

if(PrepareWindow(hInstance,hPrevlnstance,nCmdShow)!=true)|

MessageBox(NULL,”窗口初始化失败!“,“错误“,MB_OK);

return1;

)

〃检查要分析的源程序文献

if(!CheckSrcFile(lpCmdLine))return1;

//-----------------------------------------

//调用绘图语言解释器

Parser(SrcFilePath):

//-----------------------------------------

〃进入窗口消息循环

MSGMsg;

\vhile(GetMessage(&Msg,NULL。0)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);

)

returnMsg.wParam;

I

//---------初始化窗口函数实现

boolPrepareWindow(HINSTANCEhlnst,

HINSTANCEhPrevlnstancc,

intnCmdShow){

HWNDhWnd;

WNDCLASSW;

mcmset(&W,0,sizcof(WNDCLASS));

W.style=CS_HREDRAW|CS.VREDRAW;

W.lpfnWndProc=WndProc;

W.hlnstance=hlnst;

W.hCursor=LoadCursor(NULL,IDC_ARROW);

W.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);

W.lpszClassName=Name;

RegisterClass(&W);

hWnd=CreateWindow(Name,Name,

WS_OVERLAPPEDWINDOW,

225,225,740,490,NULL,NULL,hlnst,NULL);

if(hWnd==NULL)

returnfalse;

ShowWindow(hWnd,nCm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论