版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一词法分析1实验要求(1 )从源程序文件中读取有效字符并将其转换成二元组内部表示形式输出。(2)掌握词法分析的实现方法。(3)实验时间4学时。(4) 实验完成后,要提交实验报告(包括源程序清单)。2实验内容2.1主程序设计考虑:主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。id和ci数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作部分建议设计成便于调试的循环结构。每个循环处理一个单词;调用词法分析过程;输出每个单词的内部码(种别编码,属性值)。建议从文件中读取要分析的符号串。2.2词法分析过程考虑该过程根据输入单词的第一个有效字符(有时还需读第二个字符
2、),判断单词种别,产生种别编码。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将主流程图如下:常数存入数组中 ci中,并记录其在表中的位置。编号12345678910名字intcharfloatvoidcon stifelsedowhilescanf编号11121314151617181920名字printfreturnmainread+*/%一编号21222324252627282930名字=&II!编号31323334353637383940名字();ac+读源程序字符YNY是数字?曰字母?
3、曰A1XYN输出单词 的内部表示出 口是有字符?开工操作常 数 分析程序其它单词 分析程序关键字和标识符 分析程序N四:实验思路(1)我首先把这个单词的种类分成了五类,包括:关键字、标识符、常数、算 符、界符。然后利用状态转换图进行单词的识别(2)对于关键字、算符、界符。因为这些单词的个数有限。所以我单独给每个单词一个种别编码。能够做到每个单词的种别编码是不一样的。而对于常数和标 识符,我先把它们分别单独的作为一类, 然后定义一个二维数组,分别存放这个 单词的名称和编码。而这个编码就是这个单词在这个二维数组中的位置;当遇到新的标识符或常数,就把这个单词放入到相应的数组中。(3) 然后构造一个状
4、态转换图的程序。把每次得到的单词先暂时存放在temp 二维数组中。然后用这个临时的二维数组去确定这个单词是何种类别五:实验代码using System;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;n amespace Wordpublic partial class Form1 : Formpublic Form1()In itializeComp onen t();char receive; /从输入得到的源程序 char ch;
5、这是从源程序读取的一个字符string cache; /暂存的单词int index; /记录取到哪个位置了key_word temp; 用来临时存放得到这个单词 struct key_wordpublic string key_name; public int number;struct num_wordpublic string num_name; public int number;struct ID_wordpublic string ID_name;public int number;public int num_index;public int ID_index;DataTable
6、 dt;private void butt on 1_Click(object sen der, Even tArgs e) (” 助记符”);外部编码);内部编码);类型);in dex = 0;num_in dex = 0;ID_i ndex = 0;while (index receive.Length)cache = n ull;Get_Word();if (temp.number = 1)int i = 0;int flag = 0;if (num_index = 0)Numnumn dex. num_n ame = temp.key_ name;Numnum_in dex. nu
7、mber = num_in dex; num_in dex+;elsefor (i = 0; i = num_index)Numnum_in dex. num_n ame = temp.key_ name; Numnum_in dex. nu mber = num_in dex; flag = num_in dex;num_in dex+;DataRow dr = dt.NewRow();dr助记符=temp.key_name;dr外部编码=temp.number;dr内部编码=+Numflag.number; dr”类型=常数;else if (temp.number = 0)int i =
8、 0;int flag = 0;if (ID_index = 0)IDID_i ndexD_n ame= temp.key_ name;IDID_i ndex. number = ID_i ndex;ID_in dex+;elsefor (i = 0; i = ID_index)IDID_i ndexD_n ame = temp.key_ name; IDID_i ndex. nu mber= ID_i nde x;flag = ID_i nde x;ID_in dex+;DataRow dr = dt.NewRow();dr助记符=temp.key_name;dr外部编码=temp.numb
9、er;dr内部编码=IDflag.number;dr类型=标识符;elseDataRow dr = dt.NewRow();dr助记符=temp.key_name;dr外部编码=temp.number;if (temp.number = 15 & temp.number = 31 & temp.number ; Key22.number = 22; Key23.key_name =;Key25.number = 25; Key26.key_name = =; Key26.number = 26; Key27.key_name = &;Key27. nu mber =27;Key28.key_
10、name=;Key28. nu mber=28; Key29.key_name=!;Key29. nu mber=29; Key30.key_name=;Key30. number = 30;Key31.key_ name=(;Key31. number =31;Key32.key_ name=);Key32.number :=32; Key33.key_name=;Key33. nu mber=33;Key34.key_ name=;Key34. nu mber=34; Key35.key_name II.II. 55Key35. nu mber=35;Key36.key_ nameII I
11、I.55Key36. nu mber =36; Key37.key_name =- ;Key37. nu mber=37; Key38.key_name=;Key38.number = 38; Key39.key_name=+; Key39.number = 39;Key40.key_name = -; Key40.number = 40;Num = new num_word1024;ID = new ID_word1024;public void GetChar()/得到一个字符if (index receive.Length)ch = receive ndex;in dex+;elsech
12、 = 0;public void GetNotKong()/得到一个不是空的字符while (index = A & ch = a & ch = O & ch = 9)return true;elsereturn false;public int Get_Number()得到这个单词的编码for (int i = 0; i = A & ch = a & ch = O & ch = 9)Con Cat();GetChar();while (IsDigit()Con Cat();GetChar();retrace();temp.key_ name = cache;temp .nu mber = 1
13、;else if (ch = +)Con Cat(); GetChar(); if (ch = +) Con Cat();temp.key_ name temp .nu mber = elseretrace。;temp.key_ name temp .nu mber = else if (ch =-)Con Cat(); GetChar(); if (ch =-) Con Cat();temp.key_ name temp .nu mber = elseretrace();temp.key_ name temp .nu mber = else if (ch =)Con Cat(); GetCh
14、ar(); if (ch =) Con Cat();temp.key_ name temp .nu mber = elseretrace();temp.key_ name temp .nu mber = else if (ch =)Con Cat(); GetChar(); if (ch =) Con Cat();temp.key_ name temp .nu mber = elseretrace();temp.key_ name temp .nu mber = else if (ch = !)Con Cat();GetChar();=cache;Get_Number();=cache;25;
15、=cache; Get_Number();=cache;21;=cache; Get_Number();if (ch =)Con Cat();temp.key_ name=cache;temp .nu mber =24;elseretrace();temp.key_ name=cache;temp .nu mber =Get_Number();elseif (ch = &)Con Cat();GetChar();if (ch = &)Con Cat();temp.key_ name=cache;temp .nu mber =27;elseretrace();temp.key_ name=cac
16、he;temp .nu mber =Get_Number();elseif (ch = T)Con Cat();GetChar();if (ch = T)Con Cat();temp.key_ name=cache;temp .nu mber =28;elseretrace();temp.key_ name=cache;temp .nu mber = Get_Number(); elseCon Cat();temp.key_ name = cache; temp .nu mber = Get_Number();六:实验截图(1 )我测试的程序为 void main() int a=20;int
17、 b=15;if(a=20)prin tf(A);if(b=20)prin tf(B);谓输入源程序o i d m&in () intint l=l5t i2=2U priutf TA J; if priatfCi J ; 肋记符外部编码内部编码凳型“*id00nhain1331界符)32t33i nt20i标识符=20Ji匡算付2010常数:35界符int2b02融符廷行201511J 1二阴1卜助记符朴部编码内部编码类型沪:品if&(31界符aCi1标说符二二El足算付2010常數)孟printfti关薛c31畀符_ff373标识符r3T界待)3Z界符25畀符W 1III助记符外钢解内部编玛冀型4(31異待tQ2标识符21201032ri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息论与编码第八章1
- 校园数据中台技术方案
- 人教部编版四年级语文上册第22课《为中华之崛起而读书》精美课件
- 2024年宁夏客运资格证考试考什么
- 算法设计与分析 课件 5.6.1-动态规划应用-最长公共子序列-问题描述和分析
- 2024年新疆客运资格证需要什么条件
- 2024年武汉申请客运从业资格证2024年试题
- 2024年赣州客运从业资格证培训资料
- 2024年宁夏客运资格证考几科
- 2024-2025学年山东省潍坊市寒亭区统编版六年级上册第一次月考语文试卷(含答案解析)
- 2024-2030年中国腐植酸行业竞争格局与运行形势分析报告
- 篮球 原地运球(课件)-2024-2025学年人教版体育与健康八年级全一册
- 23J916-1 住宅排气道(一)
- 2024年新人教版四年级数学上册《第5单元第5课时 梯形的认识》教学课件
- 采购主管岗位招聘笔试题与参考答案(某大型国企)2024年
- 短视频运营及带货逻辑课件
- 2024年中国陶茶具市场调查研究报告
- 2022年江苏省普通高中学业水平测试生物试卷
- 人教版(2024)七年级英语上册教学课件Unit 3 Lesson 6 Reading Plus
- 第4章 跨境电商选品与定价
- 《介绍教室》(教案)-2024-2025学年一年级上册数学北师大版
评论
0/150
提交评论