词法分析器设计docWord格式文档下载.docx
- 文档编号:19265133
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:160.97KB
词法分析器设计docWord格式文档下载.docx
《词法分析器设计docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《词法分析器设计docWord格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
圆括号(左、右)用于表达式中,用于改变运算的优先级,以及标识函数的参数;
分号用于标识一个语句的结束。
^[\f\t\n();
]$
6、初等函数运算语言支持的常量还包括:
PI,E。
^PI|E$
2.2DFA
2.3状态转换表
_
字符
数字
运算符
小数点
1
2、4
2
3
4
2.4记号表
2、实验程序清单
function.cpp
mains.cpp
name.h
wordID.txt
3、调试过程和运行结果
4、"
x=0.5*PI;
y=E;
?
1/3*(ln(y)+5*sin(x))+(7+z)^2;
"
5、程序的主要部分及其功能说明
函数声明
----------------------------------------name.h------------------------------------------------------
#include<
iostream>
string>
usingnamespacestd;
constintMax=1000;
conststringFunctionName[]={"
sin"
"
cos"
tg"
"
ctg"
log"
lg"
ln"
PI"
E"
};
//关键字
classOperate
{
private:
stringstr;
//输入的字符串
stringword[Max];
//输出的结果
intnum[Max];
//输出的类型
public:
intstartPostion;
//字符开始位置
intnowPostion;
//字符当前位置
intlength;
//结果个数
Operate(strings);
voidgetWordAndNum();
boolisNumber(charc);
boolisChar(charc);
//boolisChar(charc);
intisOperaters(charc);
boolisblank(charc);
voidaddWords(strings,intn);
};
intisKey(stringstr);
voidwork(stringstr);
-----------------------------------------function.cpp------------------------------------------------
函数定义
iomanip>
#include"
name.h"
//Operate类定义
Operate:
:
Operate(strings)
{
str=s;
startPostion=0;
nowPostion=0;
length=0;
}
voidOperate:
getWordAndNum()
for(inti=0;
i<
=(length-1);
i++)
cout<
<
setw(10)<
word[i]<
setw(3)<
num[i]<
>
\n"
;
boolOperate:
isNumber(charc)
if(c>
='
0'
&
&
c<
9'
)
returntrue;
returnfalse;
isChar(charc)
if((c>
a'
z'
)||(c>
A'
Z'
)||c=='
_'
intOperate:
isOperaters(charc)
switch(c)
case'
'
return10;
case'
return11;
('
return12;
)'
return13;
+'
return14;
-'
return15;
*'
return16;
/'
return17;
case'
='
return18;
^'
return19;
default:
return0;
isblank(charc)
'
\t'
\n'
addWords(strings,intn)
word[length]=s;
num[length]=n;
length+=1;
//其他函数
//是否是关键字,是返回序号,否返回0
intisKey(stringstr)
9;
if(str==FunctionName[i])
returni+1;
return0;
voidwork(stringstr)
{
intlongs=str.length();
stringaword;
charc;
//当前字符
intstate=0;
//状态
intnumber=0;
//类型
Operateop(str);
while(true)
{
//读取字符
if(op.nowPostion>
=longs)
break;
else
c=str[op.nowPostion];
switch(state)
{
case0:
//初始状态
if(c=='
$'
break;
//如果是运算符
//保存当前运算符,startPostion=nowPostion=+1
number=op.isOperaters(c);
if(number>
0)
{
op.addWords(str.substr(op.startPostion,1),number);
op.nowPostion++;
op.startPostion=op.nowPostion;
}
if(op.isblank(c))
//如果是字符
if(op.isChar(c))
state=1;
if(c>
1'
c<
state=4;
if(c='
{
state=2;
case1:
//识别字符串
if(op.isChar(c)||op.isNumber(c))
//否则的话,完成当前标识符的识别
number=20;
aword=str.substr(op.startPostion,op.nowPostion-op.startPostion);
if(isKey(aword)>
number=isKey(aword);
op.addWords(aword,number);
state=0;
case2:
//识别0,若下一个字符不是小数点'
.'
则显示输入错误,跳过0,读取下一个字符
state=3;
if(op.isOperaters(c)>
state=0;
op.addWords("
0开头,输入错误!
跳过"
0);
case3:
//识别0-9
if(op.isNumber(c))
op.addWords(str.substr(op.startPostion,op.nowPostion-op.startPostion),21);
case4:
//识别1-9
if(op.isNumber(c))//识别整数
)//识别小数
}
}
op.getWordAndNum();
------------------------------------------mains.cpp------------------------------------------
主函数
输入测试数据!
voidmain(void)
//测试数据
stringstr="
work(str);
system("
pause"
);
}
6、实验收获体会
通过这次试验初步掌握生成词法分析器的方法,加深对词法分析原理的理解。
7、改进意见
用函数指针来调用判断字符类型,以便于以后更改关键字等判断条件时,大量修改代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析器 设计 doc