词法分析程序的设计与实现研究
2014-04-22胡建陶兰美辉
杨 平 胡建陶 兰美辉
(曲靖师范学院计算机科学与工程学院,云南 曲靖655011)
0 引言
词法分析是编译程序的第一阶段的工作,对输入的源程序进行词法分析,产生与其等价的属性自流作为输出[1-2]。编译程序在完成词法分析后,就进入语法分析阶段。词法分析是实现编译第一个核心阶段。本实验的程序设计语言用C语言,因为C语言是本科生最熟悉的语言,C语言编译器一般都是以汇编语言作为目标语言,汇编语言学生也相对熟悉,用C编程出现的系统报告的出错信息可作为教学中的实例,而且通过编写程序,学生对C语言的掌握能达到一个新的高度。
1 词法分析程序的设计
词法分析的功能是对输入的源程序,按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位[3-5]。用C语言编写的源代码,包括如下单词:关键字、标识符、常数、运算符、界限符。程序的输入为用C编写的源程序,输出为属性字流,为二元组形式(syn,token),syn为单词种别码,token为识别出的单词。
1.1 设计词法分析规则
单词的构词规则如下(用扩充的BNF表示)
<关键字>→int/float/if/for……
<标识符>→<字母>|<_>{<字母>|<数字>|<_>}
<常数>→<数字>|<数字><数字串>
<运算符>→+|-|*|/|=……
<界限符>→(|)|[|]|{|}|;……
<数字>→0|1|2|3|4|5|6|7|8|9
<字母>→a|b|……|z|A|B|……|Z
1.2 设计状态转换图
根据构词规则(词法规则),设计的状态转换图如图1:
图1 状态转换图
1.3 设计各种单词符号对应的种别码
表1 单词符号对应的种别码
2 词法分析程序的实现
2.1 词法分析程序算法流程图
2.2 词法分析过程中的关键算法实现
2.2.1 空格处理算法
for(n=0;n<8;n++)token[n]=NULL;
ch=prog[p++];
while(ch=='')
{
ch=prog[p];p++;
}
图2 词法分析程序算法流程图
2.2.2 关键字、标识符的判定算法
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch='_')
{
m=0;
while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]=' ';
p--;
syn=41;
for(n=0;n<32;n++)//将识别出来的字符和已定义的关键字作比较
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
2.2.3 数字的判定算法
if((ch>='0'&&ch<='9'))//数字
{
sum=0;
while((ch>='0'&&ch<='9'))
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
p--;
syn=40;
}
3 结束语
词法分析是对输入的符号串形式的源程序进行最初的加工处理,是实现编译第一个核心阶段。本文对词法分析对词法分析程序进行了设计与实现,并给出了词法分析过程中的关键算法。词法分析的设计与实现对编译器的实现有着至关重要的作用。
[1]陈英,陈朔鹰.编译原理[M].北京:清华大学出版社,2009:58-74.
[2]童亚拉.分布式编译的方法和系统研究[J].计算机技术与发展,20(5):79-82.
[3]张岚,武保锭.类高级语言编译器的设计与实现[J].内蒙古科技与经济,2009:194(16):75-77.
[4]高攀.C 语言安全编译器研究[D].成都:电子科技大学,2004:24-56.
[5]项炜.微型编译器的实现及优化讨论[D].成都:电子科技大学,2004:4-51.