资源描述:
《编译原理课程设计 词法语法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、课程设计仁C语言词法分析器1•题目C语言词法分析2•内容选一个能正常运行的c语言程序,以该程序出现的字符作为单词符号集,不用处理c语言的所有单词符号。将解析到的单词符号对应的二元组输出到文件中保存可以将扫描缓冲区与输入缓冲区合成一个缓冲区,一次性输入源程序后就可以进行预处理了3•设计目的掌握词法分析算法,设计、编制并调试一个词法分析程序,加深对词法分析原理的理解4•设计环境(电脑语言环境)语言环境:C语言CPU:i7HQ6700内存:8G5•概要设计(单词符号表,状态转换图)5.1词法分析器的结构词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(sy
2、n,token或sum)构成的序列。词法分析程序可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词.为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:1)ch存放最新读进的源程序字符2)strToken存放构成单词符号的字符串3)Buffer字符缓冲区4)structkeyType存放保留字的符号和种别5.2待分析的简单词法(1)保留字break、case、char、const、int、do、while...(2)运算符和界符二、+、・、*、/、%、,、;、(、'?、#5
3、.3各种单词符号对应的种别码单词符号种别码单词符号种别码ID0sizeof24INT1static25auto2struct26break3switch27case4typedef28char5union29const6unsigned30continue7void31default8volatile32do9while33double10二34else11+35enum12-36extern13*37float14/38for15%39goto16J40if17•941int18(42long19)43register207■44return21clear45s
4、hort22#46signed23lettet(letter
5、digit)*47dightdight*485.3状态转换图数字JS字6•详细设计(数据结构,子程序)算法思想:首先设置3个变量:①strToken用来存放构成单词符号的字符串;②ch用来字符;③structkeyType用来存放单词符号的种别码。扫描子程序主要部分流程如下图所示。变旻初始化卩子程序结构:子程序名功能GETCHAR()读一个字符到ch中GETBC()读一个非空白字符到ch中CONCATOffiCHAR中字符连接到strToken之后LETTER()判断CHAR中字符是否为字母DIGIT(
6、)判断ch中字符是否为数字RESERVE()用strToken中的字符串查找保留字表,并返回保留字种别码,若返回零,则非保留字RETRACT()把CHAR中字符回送到缓冲区7•程序清单//ConsoleApplicationl.cpp:定义控制台应用程序的入口点。//#include"sldafx.h"ftinclude"stdio.h"#include"sldlib.h"#include"conio.h"#include"string,h"^defineN47charch;charstrToken[20];//存放构成单词符号的字符出charbuffer[102
7、4];//字符缓冲区structkeyType{charkeyname[256];intvalue;}Key[N]={{0},{"$INT",1},{"auto",2},{"break",3},{"case",4},{"char",5:,{"const/:6:,{"continue",7),{"defaull,z,8},I"de",9:,{"double",10},{"else",11},{"enum",12},{,,exlern,,>13},{,,float,/,14},{"g",15},{"goto",16},{"if",17},{Ft",18},{"long
8、",19},{"register",20},{"return",21},{"short.",22},{"signed",23},{"size。!?",24},{,,static,/,25},{"struct",26},?"switch",27},{"typede「",28},{"union",29},["unsigned",3()},「void",31},{"vokUile",32},{"while",33},{〃=",34},{"+〃,35},{〃-〃,36},{〃*",37},{7",38},{*39},{",",40},{”;〃,41},{〃(〃,42},{
9、“)〃,4