编译实习-词法分析
编号:
实总评 教师签名 一 二 三 四 五 六 七 八 九 十 习
成 绩
《编译原理》课程
实习报告
编 号:
实习题目: 词法分析器
专业(班): 学生学号: 学生姓名:
任课教师:
,:,: 年 ,, 月 ,9 日
1
1. 问题定义和分析
1.1 实习目的
1.2 实习
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
1.3 要求分析
2. 程序设计
2.1. 数据结构
2.2. 算法及程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
2.3. 界面
3. 程序运行实例
3.1 实例1
3.2 实例2
3.3 实例3
3.4 实例4
3.5 非合法词法输入 4. 部分程序核心源代码 5.
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
2
1. 问题定义与分析
1.1 实习目的
构造一个小语言的词法分析程序。
1.2 实习要求
(1)设计一个包含简单算术
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式、赋值语句、IF 语句的小语言的文法。
(2)根据此文法,构造一词法分析程序。输入以“#”为结束符的源程序,输出为各类单词表和单词串文件。
(3)源程序和输出的单词串均以文件的形式存放。单词的自身值均为其对应的表的指针,如标识符表的指针、常数表的指针等。
(4)提交:实习报告、程序运行结果。
1.3 要求分析
1.3.1 输入部分
输入为文法源程序,定义CString 类型变量 m_EnterString ,用于获取编辑框1的输入,将其转换为char类型的数组,用s 保研,即char *s=m_EnterString.GetBuffer() ,再将s中的内容以文件形式保存于D盘test.txt中,即: ofstream outfile; int x=0;
outfile.open("D:\\test.txt");
while(s[x]!='#')
{
outfile<
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
给m_OutputString 添加输出内容,如下即为当所识别的内容为关键字begin时将begin与其种别
3
码添入的代码 :m_OutputString.Insert(m_OutputString.GetLength(),arr.c_str());
m_OutputString.Insert(m_OutputString.GetLength()," 1\r\n"); 1.3.3 待分析的简单的词法
(1)关键字:
begin end if then else while do int char
(2)标识符和数字
(3)运算符
+ - * / = := < <= << <>
> >= >>
(4)界限符
{ } [ ] ' ( ) ; ,
(5)结束符 #
1.3.4 各种单词符号对应的类别码
单词符号 类别码 单词符号 类别码
begin 1 < 18
end 2 <= 19
if 3 << 20
then 4 <> 21
else 5 > 22
while 6 >= 23
do 7 >> 24
int 8 ( 25
char 9 ) 26
标识符 10 { 27
常数 11 } 28
+ 12 ' 29
- 13 ; 30
* 14 , 31
/ 15 [ 32
= 16 ] 33
:= 17 # 0
4
2. 设计
2.1 数据结构
定义了以下字符串类型数据:
CString m_EnterString :用于接受编辑框1输入的源程序 CString m_OutputString; :用于保存输出到编辑框2的内容,即单词符号
与其对应的类别码 char *s=m_EnterString.GetBuffer() :用于将输入的Cstring类型转换为字符数组
类型,以存入文件中 ofstream outfile :用于将源程序写入文件
FILE *fpin :用于读取文件内容,即源程序 界面数据结构:
IDC_STATIC1 (Group-box Control) 放输入框的框 IDC_STATIC2 (Group-box Control) 放输出框的框 IDC_EDIT1 (Edit Control) 输入编辑框 IDC_EDIT2 (Edit Control) 输出编辑框 IDOK (Button Control) 确定按钮 IDCANCEL (Button Control) 取消按钮 IDD_CIFA_DIALOG (Dialog) 整个界面框
5
界面如下图所示:
2.2. 算法及程序流程图
2.2.1算法设计:
算法的基本任务是从字符串表示的源程序中识别出具有独立意思的单词符号,无独立意义的字符视为错误字符,基本思想是根据扫描到单词符号的第一个字符的各类,拉出相应的单词符号,根据字符与类别码对应表,找到相应的类别码并输出,具体见流程图。
6
2.2.1程序流程图如下:
开始
输入源程序
txt格式在于D盘
打开已存储的文件
初始化文件指针
识别指针内容
Y
结束 是#,
N
N N N N 空/换界符, 数字, 字母, 行?
Y Y
Y 加入arr 将字符加入arr
指向下一个字符 指下个字符
指向下一个字符
输出输出Y Y ch为ch为数字, 不可界符字母/数字, N 识别相应
字符 的类
别码
将arr与key中项比较 输出
arr类
别码N 指向下一字符 匹配, 为11
Y 标识符
根据返回值输出
7 arr与其类别码
2.3. 界面
8
3. 程序运行实例
3.1 实例1
3.2 实例2
9
3.3 实例3
10
3.4 实例4
11
3.5 非合法词法输入
4. 部分程序核心源代码 void CcifaDlg::Start()
{
ofstream outfile;
int x=0;
outfile.open("D:\\test.txt");
if(!outfile)
{
cout<<"文件打开失败"<='a'))||((c<='Z')&&(c>='A')))
return 1;
else
return 0;
}
int CcifaDlg::IsDigit(char c)
{
if(c>='0'&&c<='9')
return 1;
else
return 0;
}
5. 总结
通过此次实验,自己动手写这样一个简单的词法分析器,通过设
计、编制并调试词法分析器,加深对词法分析原理的理解;熟悉了
构造词法分析程序的手工方式的相关原理,在使用C++中MFC编写程
序的过程中,也加强了自己的编程练习。
13