欢迎来到天天文库
浏览记录
ID:39836324
大小:936.50 KB
页数:11页
时间:2019-07-12
《词法分析器-设计思路》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、词法分析器设计思路实验内容词法分析的主要任务是:从左到右逐个字符地扫描源程序,产生一个个单词(Token),同时检查源程序中的词法错误。思路1、因为要分离出一个个单词,所以必须先知道怎样的字符串才是单词。在本实验中,是对simple语言进行扫描,所以,必须先把simple语言的单词都先存放到内存里后,才能继续进行操作。and1output21*41array2procedure22*/42begin3program23+43bool4read24,44call5real25-45case6repeat26.46char7set27..47constant8stop28/48dim9th
2、en29/*49do10to30:50else11true31:=51end12until32;52false13var33<53for14whilr34<=54if15write35<>55input16标识符36=56integer17整数37>57not18字符常数38>=58of19(39[59or20)40]60思路将这些单词存入内存怎样实现呢?方法一:声明一个二维数组stringA[60][2];例如:A[0][0]=“and”;A[0][1]=“1”;A[1][0]=“array”;A[1][1]=“2”;……思路将这些单词存入内存怎样实现呢?方法二:将每个单词声明成为一
3、个结构类型的结点,每个单词的两个属性,即(单词本身值,种别)作为这个节点的两个域的内容。structnode{stringword;stringtype;//这个type定义成为int类型也可以};nodeA[60];A[0].word=“and”;A[0].type=“1”;……思路2、要对源程序从左到右一个个进行扫描。这里涉及到几个问题:(1)源程序是放在一个txt文件里的,所以必须先打开该txt文件后,将里面的内容先读进来。ifstreaminfile;infile.open(“文件名.txt”,iso::in);//读文件infile.close();具体的文件操作代码详见C+
4、+课本第10章!思路例如:#include#include#includevoidmain(){chars[100];ifstreama;a.open("F:\test.txt",ios::in);a>>s;cout<5、对源程序从左到右一个个进行扫描。这里涉及到几个问题:(3)扫描的时候,怎样才能分隔出一个单词呢?空格,分号,回车符,逗号,冒号,/号,*号,’号等等。注意:要把所有可能的分隔符都找出来;分号,逗号等这些符号,自己本身就是单词。programexample2;varA,B,C:integer;X,Y:bool;begin/*thisisanexample*/A:=B*C+37;X:=’ABC’end.思路2、要对源程序从左到右一个个进行扫描。这里涉及到几个问题:(4)通过分隔符分隔出来一个个词之后,怎么知道这个词是不是就是simple语言的单词呢?答:就是跟那个单词表(也就是前面我们所创6、建的那个二维数组)来比较。比如,分离出来了and这个单词了,就去二维数组里面,从下标为0的地方开始,看看if(A[0][0]==“and”),如果是,表明这个就是单词了,那么就将A[0][0]和A[0][1]输出。即cout<<“(“<
5、对源程序从左到右一个个进行扫描。这里涉及到几个问题:(3)扫描的时候,怎样才能分隔出一个单词呢?空格,分号,回车符,逗号,冒号,/号,*号,’号等等。注意:要把所有可能的分隔符都找出来;分号,逗号等这些符号,自己本身就是单词。programexample2;varA,B,C:integer;X,Y:bool;begin/*thisisanexample*/A:=B*C+37;X:=’ABC’end.思路2、要对源程序从左到右一个个进行扫描。这里涉及到几个问题:(4)通过分隔符分隔出来一个个词之后,怎么知道这个词是不是就是simple语言的单词呢?答:就是跟那个单词表(也就是前面我们所创
6、建的那个二维数组)来比较。比如,分离出来了and这个单词了,就去二维数组里面,从下标为0的地方开始,看看if(A[0][0]==“and”),如果是,表明这个就是单词了,那么就将A[0][0]和A[0][1]输出。即cout<<“(“<
此文档下载收益归作者所有