版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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) dt = new DataTable();(” 助记符”);外部编码);内部编码);类型);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_ na
7、me;Numnum_in dex. nu 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 (te
8、mp.number = 0)int i = 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_
9、name;dr外部编码=temp.number;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
10、 mber =27;Key28.key_ 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=3
11、5;Key36.key_ nameII II.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 = receiv
12、e ndex;in dex+;elsech = 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 = ca
13、che;temp .nu mber = 1;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 (
14、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();GetChar();=cache;Ge
15、t_Number();=cache;25;=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
16、();temp.key_ name=cache;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 )我测试的程序为 voi
17、d main() int a=20;int 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标识符21201032r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高级统计师资格考试(高级统计实务与案例分析)试题库及答案(江苏省扬州市2026年)
- 初级统计师资格考试(统计专业知识和实务)试题库及答案(上海市2026年)
- 2026年验船师考试(C级船舶检验专业实务)强化训练试题及答案一
- 2026年上半年甘肃嘉峪关全国英语等级考试(PETS)一级B全真模拟试题及答案解析
- 2026年全国成人高等学校招生考试(数学(文)-高起点)模拟试题及答案
- 煤矿开采单位驾驶员定期维护安全操作规程
- 有机奶粉全球市场总体规模
- 公共营养师之四级营养师高分题库附答案
- 2026年高级统计师资格考试(高级统计实务与案例分析)试题库及答案(浙江温州)
- 电梯使用单位焊工运行操作安全操作规程
- 工会法培训知识
- 髌骨骨折护理课件
- GB/T 2624.5-2024用安装在圆形截面管道中的差压装置测量满管流体流量第5部分:锥形装置
- 高血压性心脏病护理
- 餐馆用工合同
- 警察对学生安全演讲稿模板5篇
- 第2课如何鉴赏美术作品课件高中美术人教版美术鉴赏
- TD/T 1069-2022 国土空间生态保护修复工程验收规范(正式版)
- (高清版)WST 360-2024 流式细胞术检测外周血淋巴细胞亚群指南
- CTT4000用户手册(维护分册)V1.1
- 2024年广东阳江市交通投资集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论