ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:72.58KB ,
资源ID:11861662      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11861662.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验一词法分析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验一词法分析.docx

1、实验一词法分析 实验一 词法分析1实验要求(1)从源程序文件中读取有效字符并将其转换成二元组内部表示形式输出。(2)掌握词法分析的实现方法。(3)实验时间4学时。(4)实验完成后,要提交实验报告(包括源程序清单)。2实验内容2.1主程序设计考虑:主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。id 和ci 数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作部分建议设计成便于调试的循环结构。每个循环处理一个单词;调用词法分析过程;输出每个单词的内部码(种别编码,属性值)。建议从文件中读取要分析的符号串。2.2词法分析过程考虑该过程根据输入单词的第一个有效字符(有

2、时还需读第二个字符),判断单词种别,产生种别编码。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组 id 中,将常数存入数组中 ci 中,并记录其在表中的位置。编号12345678910名字intcharfloatvoidconstifelsedowhilescanf编号11121314151617181920名字printfreturnmainread+*/%=编号21222324252627282930名字= =&|!编号31323334353637383940名字();,“+-三:主流程图如下: 四

3、:实验思路(1)我首先把这个单词的种类分成了五类,包括:关键字、标识符、常数、算符、界符。然后利用状态转换图进行单词的识别(2)对于关键字、算符、界符。因为这些单词的个数有限。所以我单独给每个单词一个种别编码。能够做到每个单词的种别编码是不一样的。而对于常数和标识符,我先把它们分别单独的作为一类,然后定义一个二维数组,分别存放这个单词的名称和编码。而这个编码就是这个单词在这个二维数组中的位置;当遇到新的标识符或常数,就把这个单词放入到相应的数组中。(3)然后构造一个状态转换图的程序。把每次得到的单词先暂时存放在temp二维数组中。然后用这个临时的二维数组去确定这个单词是何种类别五:实验代码us

4、ing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Word public partial class Form1 : Form public Form1() InitializeComponent(); char recei

5、ve; /从输入得到的源程序 char ch; /这是从源程序读取的一个字符 string cache; /暂存的单词 int index; /记录取到哪个位置了 key_word temp; /用来临时存放得到这个单词 struct key_word public string key_name; public int number; struct num_word public string num_name; public int number; struct ID_word public string ID_name; public int number; public int num

6、_index; public int ID_index; DataTable dt; private void button1_Click(object sender, EventArgs e) dt = new DataTable(); dt.Columns.Add(助记符); dt.Columns.Add(外部编码); dt.Columns.Add(内部编码); dt.Columns.Add(类型); receive = textBox1.Text.ToCharArray(); index = 0; num_index = 0; ID_index = 0; while (index rec

7、eive.Length) cache = null; Get_Word(); if (temp.number = 1) int i = 0; int flag = 0; if (num_index = 0) Numnum_index.num_name = temp.key_name; Numnum_index.number = num_index; num_index+; else for (i = 0; i = num_index) Numnum_index.num_name = temp.key_name; Numnum_index.number = num_index; flag = n

8、um_index; num_index+; DataRow dr = dt.NewRow(); dt.Rows.Add(dr); dr助记符 = temp.key_name; dr外部编码 = temp.number; dr内部编码 = +Numflag.number; dr类型 = 常数; else if (temp.number = 0) int i = 0; int flag = 0; if (ID_index = 0) IDID_index.ID_name = temp.key_name; IDID_index.number = ID_index; ID_index+; else fo

9、r (i = 0; i = ID_index) IDID_index.ID_name = temp.key_name; IDID_index.number = ID_index; flag = ID_index; ID_index+; DataRow dr = dt.NewRow(); dt.Rows.Add(dr); dr助记符 = temp.key_name; dr外部编码 = temp.number; dr内部编码 = IDflag.number; dr类型 = 标识符; else DataRow dr = dt.NewRow(); dt.Rows.Add(dr); dr助记符 = te

10、mp.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.number = 27; Key28.key_name = |; Key28.number = 28; Key29.key_name = !; Key29.number =

11、 29; Key30.key_name = ;Key30.number = 30; Key31.key_name = (; Key31.number = 31; Key32.key_name = ); Key32.number = 32; Key33.key_name = ; Key33.number = 33; Key34.key_name = ; Key34.number = 34; Key35.key_name = ; Key35.number = 35; Key36.key_name = ,; Key36.number = 36; Key37.key_name = ; Key37.nu

12、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 = receiveindex; index+; else ch = 0; public void GetNotKong() /得到一个不

13、是空的字符 while (index = A & ch = a & ch = 0 & ch = 9) return true; else return false; public int Get_Number() /得到这个单词的编码 for (int i = 0; i = A & ch = a & ch = 0 & ch = 9) ConCat(); GetChar(); while (IsDigit() ConCat(); GetChar(); retrace(); temp.key_name = cache; temp.number = 1; else if (ch = +) ConCa

14、t(); GetChar(); if (ch = +) ConCat(); temp.key_name = cache; temp.number = 39; else retrace(); temp.key_name = cache; temp.number = Get_Number(); else if (ch = -) ConCat(); GetChar(); if (ch = -) ConCat(); temp.key_name = cache; temp.number = 40; else retrace(); temp.key_name = cache; temp.number =

15、Get_Number(); else if (ch = ) ConCat(); GetChar(); if (ch = =) ConCat(); temp.key_name = cache; temp.number = 25; else retrace(); temp.key_name = cache; temp.number = Get_Number(); else if (ch = =) ConCat(); GetChar(); if (ch = =) ConCat(); temp.key_name = cache; temp.number = 21; else retrace(); te

16、mp.key_name = cache; temp.number = Get_Number(); else if (ch = !) ConCat(); GetChar(); if (ch = =) ConCat(); temp.key_name = cache; temp.number = 24; else retrace(); temp.key_name = cache; temp.number = Get_Number(); else if (ch = &) ConCat(); GetChar(); if (ch = &) ConCat(); temp.key_name = cache;

17、temp.number = 27; else retrace(); temp.key_name = cache; temp.number = Get_Number(); else if (ch = |) ConCat(); GetChar(); if (ch = |) ConCat(); temp.key_name = cache; temp.number = 28; else retrace(); temp.key_name = cache; temp.number = Get_Number(); else ConCat(); temp.key_name = cache; temp.numb

18、er = Get_Number(); 六:实验截图(1)我测试的程序为void main() int a=20; int b=15;if(a=20)printf(A);if(b=20)printf(B);七:实验心得通过这次实验、我对于词法分析需要做的任务有了一个更加深刻的理解。将课本上的理论实践到实际上使我对课本有了很好的理解。但是,这次实验中我也发现了我很多的小缺点,这个实验也挺考验一个学生的分析能力的。因为这个实验需要做的判断是非常多的、稍微漏掉一点就有可能导致整个程序的错误。而且、开始的时候我还把实验给理解错了。这让我更加知道了做实验之前好好分析的重要性。因为如果连要求都没有搞明白就去做实验的话。带来的麻烦更多。今后一定多加注意。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1