欢迎来到天天文库
浏览记录
ID:27550310
大小:38.50 KB
页数:6页
时间:2018-12-04
《词法分析器、语法分析器试验报告doc.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、词法分析器、语法分析器试验报告一.程序思路1.词法分析器对输入的程序进行分析,将关键字,保留字与系统标识符分开,并对其属性进行说明。建立数组,将单词读入,对单词的ASCII码进行判断,将在ASCII码值在一定区间进行区分(使用if语句来判断),分开来后,对其所在ASCII值区间的不同,给予以不同的属性(比如:系统保留字…),词法分析器完成后要能识别+,-,=等字符。2.语法分析器对输入的程序语句进行分析。对每个非终结点定义单个函数,定义了它的后继节点。然后用一个构造来的函数,使定义的后继节点符合语法,否则报错。二.源程序cifafenxi:#inc
2、lude"string.h"#include"iostream.h"#include"stdio.h"#include"conio.h"#defineOK1#define……#define……classword{intch;charcode[50][50];public://word();intscan();intletter(intch);intdigit(intch);intflag(intch);intkeyword(char*ch);intalpha(char*ch);intjudge(char*ch);};intword::letter(
3、intch)//字符判断intword::alpha(char*ch)//字符属性设定intword::digit(intch)//数字判断intword::flag(intch){if(((ch>='0')&&(ch<='9'))
4、
5、((ch>='a')&&(ch<='z'))
6、
7、((ch>='A')&&(ch<='Z'))
8、
9、(ch=='+')
10、
11、(ch=='-')
12、
13、(ch=='*')
14、
15、(ch=='/')
16、
17、(ch=='=')
18、
19、(ch=='==')
20、
21、(ch=='%')
22、
23、(ch=='<')
24、
25、(ch=='>')
26、
27、(ch=='(')
28、
29、
30、(ch==')'))return(1);elsereturn(0);}intword::keyword(char*ch)//关键字判断{if((ch[0]=='i')&&(ch[1]=='n')&&(ch[2]=='t')&&(ch[3]==0)){cout<<""<<"The[int]isakeyword!"<<"";return(INT);}if((ch[0]=='c')&&(ch[1]=='h')&&(ch[2]=='a')&&(ch[3]=='r')&&(ch[4]==0)){cout<<""<<"The[char]isakey
31、word!"<<"";return(CHAR);}……………………………………………………{cout<<""<<"Itisakeyword[if]!"<<"";return(SWITCH);}return(0);}intword::judge(char*ch)//数字进位制判断if((ch[0]=='0')&&((ch[1]>='0')&&(ch[1]<='7'))){cout<<""<<"ThisisaOTCnumber,OTCvalueis"<<"["<32、……………………………return(1);}intword::scan(){inti=0,j=0,x=1;cout<<"Pleaseinput!"<<"";ch=getc(stdin);while((ch=='')33、34、(ch==10))ch=getc(stdin);if((flag(ch)==NO)){cout<<""<<"ERROR"<<"";return(ERROR);}ungetc(ch,stdin);while(x){ch=getc(stdin);if((letter(ch)==YES)){i=0;while(letter(ch35、)36、37、digit(ch)){code[j][i]=ch;ch=getc(stdin);i++;}code[j][i]=0;if(keyword(code[j])==0){if(alpha(code[j]))cout<<"Theidentifier'sIDis["<38、39、(ch=='x')40、41、((ch>='a')&&(ch<='f'))){code[j][i]=ch;ch=getc(stdin);i++;42、}code[j][i]=0;judge(code[j]);cout<<"Thenumber'sIDis["<
32、……………………………return(1);}intword::scan(){inti=0,j=0,x=1;cout<<"Pleaseinput!"<<"";ch=getc(stdin);while((ch=='')
33、
34、(ch==10))ch=getc(stdin);if((flag(ch)==NO)){cout<<""<<"ERROR"<<"";return(ERROR);}ungetc(ch,stdin);while(x){ch=getc(stdin);if((letter(ch)==YES)){i=0;while(letter(ch
35、)
36、
37、digit(ch)){code[j][i]=ch;ch=getc(stdin);i++;}code[j][i]=0;if(keyword(code[j])==0){if(alpha(code[j]))cout<<"Theidentifier'sIDis["<38、39、(ch=='x')40、41、((ch>='a')&&(ch<='f'))){code[j][i]=ch;ch=getc(stdin);i++;42、}code[j][i]=0;judge(code[j]);cout<<"Thenumber'sIDis["<
38、
39、(ch=='x')
40、
41、((ch>='a')&&(ch<='f'))){code[j][i]=ch;ch=getc(stdin);i++;
42、}code[j][i]=0;judge(code[j]);cout<<"Thenumber'sIDis["<
此文档下载收益归作者所有