编译原理上机实验-词法分析器-C++..doc
文本预览下载声明
编译原理上机实验报告
小组成员:王金名、周攀、汪国辉、澎湃、王帅、齐娟娟、刘鸳鸳
实验目的:
熟悉词法分析原理,初步认识编译程序;巩固程序编写,合理设计算法;
实验内容:
编写C语言词法分析器。实现分析输入的程序及源代码文件,提取单词符号并识别单词符号的类别,保存分析结果等功能
实验原理:
从文件或者视图中扫描获取源代码,保存于字符串;
根据特定的分界符和运算符截取单词符号;
利用串匹配,判定单词符号的类别及其类别编码;
输出结果。
实验步骤:
建立工程:新建MFC工程Lexical,在第六步将CLexicalView的基类修改为CEditView;
窗口拆分:利用类向导添加一个MFC类,基类为CeditView;利用类向导给CMainFrame添加
OncreateClient函数并编写代码:
// TODO: Add your specialized code here and/or call the base class
CRect rc;
GetClientRect(rc);
CSize paneSize(rc.Width(),rc.Height()/3-16);
m_wndSpliter.CreateStatic(this,2,1);
m_wndSpliter.CreateView(0,0,RUNTIME_CLASS(CLexicalView),paneSize,pContext);
m_wndSpliter.CreateView(1,0,RUNTIME_CLASS(CResultOut),paneSize,pContext);
return TRUE;
MainFrame.cpp中包含头文件LexicalView.h和ResultOut.h
注释掉CMainFrame::OnCreate函数中关于创建工具栏及状态栏的代码:
/************************
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
…………
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(m_wndToolBar);
///******************/
return 0;
CMainFrame::PreCreateWindow函数中添加下列代码:
cs.style = ~WS_MAXIMIZEBOX;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN)*2/3;
cs.cy = ::GetSystemMetrics(SM_CYSCREEN)*2/3;
cs.y = cs.cy/6;
cs.x = cs.cx/6;
cs.lpszName = 词法分析;
return TRUE;
LexicalView.h中包含LexicalDoc.h头文件;在LexicalView.cpp开头定义关键词、界限符、运算符;
#define MaxSize 1024
//////////////60个关键字,类别编号:-62
CString m_KeyWords[60]=
{auto,bool,break,case,catch,char,class,const,const_cast,continue,default,delete,do,double,dynamic_cast,else,enum,explicit,extern,false,float,for,friend,goto,if,inline,int,long,mutable,namespace,new,operator,private,protected,public,register,reinterpret_cast,return,short,signed,sizeof,static,static_cast,struct,switch,template,this,throw,true,try,typedef,typeid,typename,union,unsigned,using,virtual,void,volatile,while
};
///////////////23个运算符,类别编号为:-85
CString m_operator[23]=
{+,-,*,/,%,,,=,=,==,-,
!=,=,,,|,||,!,++,--,
显示全部