1、编译原理词法分析程序设计实验报告【实验目的】1了解词法分析的主要任务。2熟悉编译程序的编制。【实验内容】根据某文法,构造一基本词法分析程序。找出该语言的关键字、标识符、整数以及其他一些特殊符号,给出单词的种类和值。【实验要求】1. 构造一个小语言的文法类 C 小语言文法(以 EBNF 表示) := . :=(,) :=int, :=; :=;| :=| := :=+|- := :=| := +|- := *|/ :=ifelse := := =|!=|=|:=for(;) :=(,|) :=| := :=a|b|c|X|Y|Z :=0|1|2|8|9单词分类情况关键字:int if else
2、for标识符:以字母开头的字母和数字的组合关系运算符: =|!=|=|#include#includetypedef struct wordsint id;char name20;char value20;word;char integer20=i,n,t;char iff20=i,f;char elsee20=e,l,s,e;char forr20=f,o,r;int main()char code10000;char words20,ch;int i,j,p,count,n,m;int k=0;word symbol500;printf(“种别码:1 类别:关键字 intn“);print
3、f(“种别码:2 类别:关键字 ifn“);printf(“种别码:3 类别:关键字 elsen“);printf(“种别码:4 类别:关键字 forn“);printf(“种别码:5 类别:标识符 n“);printf(“种别码:6 类别:计算运算符 n“);printf(“种别码:7 类别:关系运算符 n“);printf(“种别码:8 类别:界符 n“);while(1)gets(code);n=strlen(code);for(m=0,j=0;m=asymbolk.value0=;symbolk.value1=;for(i=2;i)symbolk.id=7;symbolk.value0
4、=;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=)symbolk.id=7;symbolk.value0=;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=,)symbolk.id=8;symbolk.value0=,;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=;)symbolk.id=8;symbolk.value0=;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=()symbolk.id=8;symbolk.value0
5、=(;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=)symbolk.id=8;symbolk.value0=);for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=)symbolk.id=8;symbolk.value0=;for(i=1;i20;i+)symbolk.valuei=0;k+;if(codem=)symbolk.id=8;symbolk.value0=;for(i=1;i20;i+)symbolk.valuei=0;k+;count=k;system(“cls“);for(i=0;icount;i+
6、)printf(“%d “,symboli.id);printf(“%sn“,symboli.value);return 0;4.生成并输出单词符号表识别单词的状态转换图:016字母其他符号字母或数字2数字数字7其他符号3字符 a8字符 a4字符 b9 = 5字符 c5.流程图开始初始化输入语句字母或数字 ?暂存进 w o r d sW o r d s 内是否为关键字存入 s y m b o l 结构体( 关键字 )存入 s y m b o l 结构体( 标识符 )否是是否输入的字符是否为计算运算符存入 s y m b o l 结构体( 计算运算符 )是否为关系运算符是否为界符是否 否存入 s
7、 y m b o l 结构体( 关系运算符 )存入 s y m b o l 结构体( 界符 )是 是否输出 s y m b o l结束输入错误6.源程序清单int a,b,c;a=b+c;7.测试结果8.实验心得:此次实验让我了解了如何设计、编制并调试词法分析程序,并加深了我对词法分析器原理的理解;熟悉了直接构造词法分析器的方法和相关原理,并学会使用 c 语言直接编写词法分析器;同时更熟练的掌握用 c 语言编写程序,实现一定的实际功能。通过本次实验,使我更深层次的掌握了词法分析。从刚开始的无从下手到后来渐渐的突破了各个难关,虽然花了大量的时间和精力,但在我看来这绝对是值得的。起码让我明白了,光有理论是苍白无力的,我们必须将他附注于实践才能升华。