欢迎来到天天文库
浏览记录
ID:67638996
大小:126.50 KB
页数:15页
时间:2021-09-15
《实验一词法分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、.-实验一词法分析1.实验要求〔1〕从源程序文件中读取有效字符并将其转换成二元组部表示形式输出。〔2〕掌握词法分析的实现方法。〔3〕实验时间4学时。〔4〕实验完成后,要提交实验报告〔包括源程序清单〕。2.实验容2.1主程序设计考虑:主程序的说明局部为各种表格和变量安排空间〔关键字和特殊符号表〕。id和ci数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作局部建议设计成便于调试的循环构造。每个循环处理一个单词;调用词法分析过程;输出每个单词的部码〔种别编码,属性值〕。建议从文件中读取要分析的符号串。2.2词法分析过程考虑该过程根据输入单词的第一个有效字符〔有时还
2、需读第二个字符〕,判断单词种别,产生种别编码。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比拟,如表中已有该元素,那么记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数存入数组中ci中,并记录其在表中的位置。编号12345678910名字intcharfloatvoidconstifelsedowhilescanf编号11121314151617181920名字printfreturnmainread+–*/%=编号21222324252627282930名字==><!=>=<=&&
3、
4、!<>编号31323334353637383940名字(){
5、};,“‘++--三:主流程图如下:.可修编..-四:实验思路(1)我首先把这个单词的种类分成了五类,包括:关键字、标识符、常数、算符、界符。然后利用状态转换图进展单词的识别(2).可修编..-对于关键字、算符、界符。因为这些单词的个数有限。所以我单独给每个单词一个种别编码。能够做到每个单词的种别编码是不一样的。而对于常数和标识符,我先把它们分别单独的作为一类,然后定义一个二维数组,分别存放这个单词的名称和编码。而这个编码就是这个单词在这个二维数组中的位置;当遇到新的标识符或常数,就把这个单词放入到相应的数组中。(1)然后构造一个状态转换图的程序。把每次得到的单词先暂时存放在t
6、emp二维数组中。然后用这个临时的二维数组去确定这个单词是何种类别五:实验代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWord{publicpartialclassForm1:Form{publicForm1(){
7、InitializeComponent();}char[]receive;//从输入得到的源程序charch;//这是从源程序读取的一个字符stringcache;//暂存的单词intindex;//记录取到哪个位置了key_wordtemp;//用降临时存放得到这个单词structkey_word{publicstringkey_name;publicintnumber;}structnum_word{publicstringnum_name;publicintnumber;}structID_word{.可修编..-publicstringID_name;publicint
8、number;}publicintnum_index;publicintID_index;DataTabledt;privatevoidbutton1_Click(objectsender,EventArgse){dt=newDataTable();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
9、
此文档下载收益归作者所有