- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04131004-语法分析器概要
西 安年月日
实验内容
1.选择一特定文法进行LL(1)文法分析,本实验选取课本上的文法:
E-TE’
E’-+TE’|ε
T-FT’
T’-*FT’|ε
F-(E)|i
2.生成LL(1)分析表:
3.根据生成LL(1)分析表,进行程序设计。
三.方案设计
1.为了本次实验的程序设计方便,将上面的LL(1)分析表中的非终结符E’替换为G,将T’替换为V,便于入栈和出栈的方便。M[A,a]中的空白存放一个空白的字符串。
2.预测分析器模型:
3.栈STACK用于存放文法符号。分析开始时,栈底先放一个“#”,然后放进文法开始符号。
预测分析器程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号行事的。对于任何(X,a),总控程序每次都会执行下述的三种可能的动作之一:
若X=a=‘#’,则宣布分析成功,停止分析过程。
若X=a!=‘#’,则把X从栈顶逐出,让a指向下一个输入符号。
若X是一个非终结符,则查看分析表M。若M[A,a]中存放着一个关于X的产生式,则先把X逐出STACK栈顶,后把产生式的右部符号串按反序一一推进STACK栈(若符号为ε,则不推进什么东西进栈)。若M[A,a]中存放着“出错标志”,程序转出错处理。
四.测试数据及运行结果
五.总结
这次实验编写了LL(1)语法分析器,在LL(1)分析器的编写中我只达到了最低要求,就是自己并没有对任意输入的符号串进行分析,手动将预测分析表构造出来了,并且没有做出对输入串的分析。?
通过本次试验,我能够设计、编制、调试一个典型的语法分析程序,进一步掌握常用的语法分析方法。还能选择最有代表性的语法分析方法,如LL(1)?语法分析程序、算符优先分析程序和LR分析分析程序。并且有能力选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。
六.附录:源代码(电子版)
package yuFa;
public class Stack
{
public char STACK[];
public int Top;
public Stack()
{
STACK=new char[200];
STACK[0]=#;
Top=0;
}
public char GetTop()// 取出栈顶元素
{
return STACK[Top];
}
public void PushStack(String str)// 入栈
{
for(int i=str.length() - 1; i = 0; i--)
{
STACK[++Top]=str.charAt(i);
}
}
public void PushStack(char c)
{
Top++;
STACK[Top]=c;
}
public void clear()// 清空
{
Top=0;
}
public char PopStack()// 出栈
{
if(Top != 0)
{
Top--;
}
return STACK[Top];
}
public String toString()// 将栈中元素转化为字符串
{
String tmp=;
for(int i=0; i = Top; i++)
{
tmp+=STACK[i];
}
return tmp;
}
}
package yuFa;
public class InputPredictTable
{
public String Table[][]=new String[6][7];
public String[][] MakeTable()// 将E改为G,将T改为V
{
Table[0][0]= ;
Table[0][1]=i;
Table[0][2]=+;
Table[0][3]=*;
Table[0][4]=(;
Table[0][5]=);
文档评论(0)