昆明理工大学信息工程与自动化学院学生实验报告
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小时内删除。