当前位置:
文档之家› 编译原理课程设计词法语法分析器
编译原理课程设计词法语法分析器
词法分析程序可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词.
为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:
1) ch存放最新读进的源程序字符
2) strToken存放构成单词符号的字符串
3) Bufferﻩ字符缓冲区
7.程序清单
// ConsoleApplication1.cpp :定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#defineN47
charch;
{"void",31 },{"volatile",32 },{"while",33 },{"=",34 },{"+",35 },{"-",36 },{"*",37 },
{"/",38 },{"%",39 },{",",40 },{";",41 },{"(",42 },{")",43 },{"?",44 },{"clear",45 },{"#",46 } };
12
-
36
extern
13
*
37
float
14
/
38
for
15
%
39
goto
16
,
40
if
17
;
41
int
18
(
42
long
19
)
43
register
20
?
44
return
21
clear
45
short
22
#
46
signed
23
lettet(letter|digit)*
47
dight dight*
48
编译原理课程设计-词法语法分析器
———————————————————————————————— 作者:
———————————————————————————————— 日期:
编译原理课程设计
Course Design of Compiling
(课程代码)
半期题目:词法和语法分析器
实验学期:大三第二学期
读一个非空白字符到ch中
CONCAT()
把CHAR中字符连接到strToken之后
LETTER()
判断CHAR中字符是否为字母
DIGIT()
判断ch中字符是否为数字
RESERVE()
用strToken中的字符串查找保留字表,并返回保留字种别码,若返回零,则非保留字
RETRACT()
把CHAR中字符回送到缓冲区
3.设计目的
掌握词法分析算法,设计、编制并调试一个词法分析程序,加深对词法分析原理的理解
4.设计环境(电脑语言环境)
语言环境:C语言
CPU:i7HQ6700
内存:8Gﻫ5.概要设计(单词符号表,状态转换图)
5.1词法分析器的结构
词法分析程序的功能:
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
{"return",21 },{"short",22 },{"signed",23 },{"sizeof",24 },{"static",25 },
{"struct",26 },{"switch",27 },{"typedef",28 },{"union",29 },{"unsigned",30 },
4)struct keyType存放保留字的符号和种别
5.2待分析的简单词法ﻩ
(1)保留字
break、case、char、const、int、do、while…
(2)运算符和界符ﻩ
=、+、-、*、/、%、,、;、(、)、?、#
5.3各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
ID
0
sizeof
{"char",5 },{"const",6 },{"continue",7 },{"default",8 },{"do",9 },
{"double",10 },{"else",11 },{"enum",12 },{"extern",13 },{"float",14 },
{"for",15 },{"goto",16 },{"if",17 },{"int",18 },{"long",19 },{"register",20 },
{
ﻩinti;
ﻩwhile(strlen(buffer)) {
charstrToken[20];//存放构成单词符号的字符串
charbuffer[1024];ﻩ//字符缓冲区
structkeyType{
charkeyname[256];
intvalue;
}Key[N] = { {"$ID",0 },{"$INT",1 },{"auto",2 },{"break",3 },{"case",4 },
voidGetChar()//读一个字符到ch中
{
inti;
ﻩif(strlen(buffer)>0) {
ch = buffer[0];
ﻩﻩfor(i = 0; i<256; i++)
ﻩﻩbuffer[i] = buffer[i + 1];
}
else
ﻩch ='\0';
}
voidGetBC()
//读一个非空白字符到ch中
24
INT
1
static
25
auto
2
struct
26
break
3
switch
27
case
4
typedef
28
char
5
union
29
const
6
unsigned
30
continue
7
void
31
default
8
volatile
32
do
9
while
33
double
10
=
34
elnum
学生班级: 2014级软件四班
学生学号: 2014112218
学生姓名:何华均
任课教师:丁光耀
信息科学与技术学院
2017.6
课程设计1-C语言词法分析器
ﻫ1.题目
C语言词法分析
2.内容
选一个能正常运行的c语言程序,以该程序出现的字符作为单词符号集,不用处理c语言的所有单词符号。ﻫ将解析到的单词符号对应的二元组输出到文件中保存ﻫ可以将扫描缓冲区与输入缓冲区合成一个缓冲区,一次性输入源程序后就可以进行预处理了
5.3状态转换图
ﻫ
6.详细设计(数据结构,子程序)
算法思想:
首先设置3个变量:①strToken用来存放构成单词符号的字符串;②ch用来字符;③struct keyType用来存放单词符号的种别码。扫描子程序主要部分流程如下图所示。
子程序结构:
子程序名
功能
GETCHAR()
读一个字符到 ch中
GETBC()