预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
燕山大学编译原理课程设计报告设计题目:词法分析器学生姓名:学院:计算机科学与工程学院专业:计算机科学班级:计算机11-1学号:110104010003指导教师:时间:2014年1月2号目录实验目的实验要求算法设计的思想运行的环境算法设计流程图源代码运行结果心得体会一实验目的设计一个简单的词法分析器,从而进一步加深对词法分析过程的理解。二实验要求(1)该个词法分析器要求至少能够识别以下单词:关键字:elseifintreturnvoidwhile等,所有的关键字都是保留字,并且必须是小写;(2)分隔符:"","(",")","[","]","{","}",",",";","'";专用符号:+-*/<<=>>===!==()[]{}/**/等。(3)输入为待进行词法分析的源程序,输出为单词串,即由(单词,类别)所组成的二元组序列。(4)词法分析器应当能够指出源程序中的词法错误,如不可识别的符号、错误的词法等。三算法设计的思想(1)关键字表的初值关键字作为特殊标识符处理,把它们预先存储在关键字数组中,当扫描序列识别出标识符时,与该数组作比较,如能匹配则为关键字,否则为一般标识符。(2)程序中主要的变量与函数charch:存储从buffer中读取的一个字符;charbuffer[MAX]:存储读取的文件;charkey[]:存储关键字;chararr[]:存储当前扫描字符intisKey(strings):判断当前字符组是否为关键字;intisLetter(char):判断当前字符是否为字母;intisDigit(char):判断当前字符是否为数字;voidscanner(charbuffer[]):扫描buffer数组;四运行的环境Windows下的visualstudio2010。五算法设计流程图设置初值忽略空格等数组是结束?结束是否其他字母数字界符运算符输出相应标记(单词,界符)拼成数字拼成字符串输出(字符,无法识别字符)关键字输出(数字,无符号整数)输出(单词,普通字符输出(单词,关键字)返回六源代码#include<iostream>#include<stdio.h>#include<fstream>#include<string.h>usingnamespacestd;constintMAX=1000;charbuffer[MAX];//存?储洹?文?件tcharch;//存?储洹?读á取?的?字?符?stringkey[16]={"begin","end","var","proceduer","read","write","if","then","else","while","do","int","until","return","protected","var"};intisKey(strings){inti;for(i=0;i<21;i++)if(key[i].compare(s)==0)return1;return0;}//判D断?关?键ü字?intisLetter(charc){if((c<'Z'&&c>'A')||(c>'a'&&c<'z'))return1;elsereturn0;}//判D断?字?母?intisDigit(charc){if((c>='0'&&c<='9'))return1;elsereturn0;}//判D断?数簓字?voidscanner(charbuffer[]){chararr[30];//暂存当前字符intp=0,j;//for(j=0;(ch=buffer[j])!='\0';j++){inti;p=0;for(i=0;i<30;i++)arr[i]=NULL;if(ch==''||ch=='\t'||ch=='\n'){}elseif(isLetter(ch)){p=0;while(isLetter(ch)||isDigit(ch)){if(ch<='Z'&&ch>='A')ch=ch+32;arr[p++]=ch;ch=buffer[++j];}arr[p]='\0';j--;if(isKey(arr))cout<<"(“<<arr<<"\t关键字)”)"<<endl;elsecout<<"