昆明理工大学信息工程与自动化学院学生实验报告
( 2012 —2013学年 第 一 学期 )
课程名称: 开课实验室: 2012 年 12 月 03 日
年级、专业、班 | 学号 | 姓名 | 成绩 | |||||
实验项目名称 | 简单样本语言的词法分析器 | 指导教师 | ||||||
教师评语 | 该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强 □ B.中等 □ C.差 □ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般 □ C.没有 □ 教师签名: 年 月 日 | |||||||
一、实验目的及内容
编译技术是理论与实践并重的课程,而其实验课要综合运用所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
调试并完成一个词法分析程序,加深对词法分析原理的理解。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
1、待分析的简单语言的词法
(1)关键字:
begin if then while do end
所有关键字都是小写。
(2)运算符和界符:
:= + – * / < <= <> > >= = ; ( ) #
(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter| digit)*
NUM=digit digit *
(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。
2、各种单词符号对应的种别码
单词符号 | 种别码 | 单词符号 | 种别码 |
begin | 1 | : | 17 |
if | 2 | := | 18 |
then | 3 | > | 20 |
while | 4 | <> | do while语句流程图21 |
do | 5 | <= | 22 |
end | 6 | < | 23 |
letter(letter| digit)* | 10 | >= | 24 |
digit digit * | 11 | = | 25 |
* | 13 | ; | 26 |
/ | 14 | ( | 27 |
+ | 15 | ) | 28 |
- | 16 | # | 0 |
3、词法分析程序的功能
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
二、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC以及VISUAL C++6.0软件。
三、实验方法、步骤(或:程序代码或操作过程)
(1)程序代码:
#include<stdio.h>
#include<string.h>
#include<iostream.h>
char prog[80],token[8];
char ch;
int syn,p,m=0,n,row,sum=0;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner()
{
for(n=0;n<8;n++) token[n]=NULL;
ch=prog[p++];
while(ch==' ')
{
ch=prog[p];
p++;
}
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
m=0;
while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='\0';
p--;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论