语法分析器设计.doc

上传人:人*** 文档编号:561460905 上传时间:2023-04-18 格式:DOC 页数:16 大小:355.01KB
返回 下载 相关 举报
语法分析器设计.doc_第1页
第1页 / 共16页
语法分析器设计.doc_第2页
第2页 / 共16页
语法分析器设计.doc_第3页
第3页 / 共16页
语法分析器设计.doc_第4页
第4页 / 共16页
语法分析器设计.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《语法分析器设计.doc》由会员分享,可在线阅读,更多相关《语法分析器设计.doc(16页珍藏版)》请在金锄头文库上搜索。

1、12 语法分析器设计语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查 语法错误,报告错误的性质和位置,并进行适当的纠错工作.法分析的方法有多种多样,常用的方法有递归子程序方法、运算符优先数法、状态矩阵法、LL(K)方法和LR(K)方法。归纳起来,大体上可分为两大类,即自顶向下分析方法和自底向上分析方法. Syntax进行语法分析.对于语法分析,这里采用LR(1)分析法,判断程序是否满足规定的结构.构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。1.2.1 LR分析过程的设计思想

2、及算法 1:LR-table.txt:存放分析表,其中正数表示移进,负数表示归约,100表示接受状态,0表示不操作。2:grammar.txt 存放文法开始符号3:lengh.txt 存放产生式右部字符长度4:inpur.txt 输入的程序语法规则定义的文法,如下: (0) Z-S(1) S-AB(2) A-CDE(3) C-void(4) D-main(5) E-()(6) B-F(7) F-GF(8) F-G(9) G-HIJ(10) H-int(11) I-KLM(12) K-character(13) L-=(14) M-num(15) J-; 根据上面文法画出的分层有限自动机并根据分

3、层自动机构造的LR(1)分析表: voidmain()intchar=numSABCDEFGHIJKLM;#021831Ac2-33454-45676-57-281099-11025111315111212-61325141315-814-71516172016-1217191818-15-1519-9-920212221-132223242324-1425-111.2.2 程序核心代码和注释:public void analyzer() /*/循环读取grammar.txt/* /*此处代码略*/*/循环读取 lengh.txt/* /*此处代码略*/*/ 读入文件,进行语法分析/*stri

4、ng strReadFile;strReadFile=input.txt;myTextRead.myStreamReader=new StreamReader(strReadFile);string strBufferText;int wid =0;Console.WriteLine(分析读入程序(记号ID):n);dostrBufferText =myTextRead.myStreamReader.ReadLine();if(strBufferText=null)break;foreach (String subString in strBufferText.Split()if(subStr

5、ing!=)int ll;if(subString!=null)ll= subString.Length; /每一个长度elsebreak;int a=ll+1;char b = new chara;StringReader sr = new StringReader(subString);sr.Read(b, 0, ll); /把substring 读到char数组里int sort=(int)b0;/ wordi 和 wordNumi对应/先识别出一整个串,再根据开头识别是数字还是字母Wordwid=subString;if(subString.Equals(void)wordNumwid

6、=0;else if(subString.Equals(main)wordNumwid=1;else if(subString.Equals()wordNumwid=2;else if(subString.Equals()wordNumwid=3;else if(subString.Equals(int)wordNumwid=4;else if(subString.Equals(=)wordNumwid=6;else if(subString.Equals()wordNumwid=22;else if(subString.Equals(;)wordNumwid=23;else /识别变量和数字if(sort47&sort58)wordNumwid=7;else wordNumwid=5;Console.Write(subString+(+wordNumwid+)+ );wid+;Console.WriteLine(n);while (strBufferText!=null);wordNumwid=24;myTextRead.myStreamReader.Close();/*/读入LR分析表/* /*此处代码略*/int state = new int100;string symbol =new string100;state0=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号