- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理LL(1)文法分析器实验
计科1111 刘琴英 201111621120
本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,判断输入的字符串是否属于该文法的句子。
基本实现思想:接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。然后取出分析栈的栈顶字符,判断是否为终结符,若为终结符则判断是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“#”且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。若不为“#”且不与当前输入符号一样,则出错。
若栈顶符号为非终结符时,查看预测分析表,看栈顶符号和当前输入符号是否构成产生式,若产生式的右部为ε,则将栈顶符号出栈,取出栈顶符号进入下一个字符的分析。若不为ε,将产生式的右部逆序的入栈,取出栈顶符号进入下一步分析。
程序流程图:
本程序中使用以下文法作对用户输入的字符串进行分析:
E→TE’
E’→+TE’|ε
T→FT’
T’→*FT’|ε
F→i|(E)
该文法的预测分析表为:
代码:
package ;
import java.io.*;
public class LL {
String Vn[] = { E, E, T, T, F }; // 非终结符集
String Vt[] = { i, +, *, (, ), # }; // 终结符集
String P[][] = new String[5][6]; // 预测分析表
String fenxi[] ; // 分析栈
int count = 1; // 步骤
int count1 = 1;//’分析栈指针
int count2 = 0, count3 = 0;//预测分析表指针
String inputString = ; // 输入的字符串
boolean flag;
public void setCount(int count, int count1, int count2, int count3){
this.count = count;
this.count1 = count1;
this.count2 = count2;
this.count3 = count3;
flag = false;
}
public void setFenxi() { // 初始化分析栈
fenxi = new String[20];
fenxi[0] = #;
fenxi[1] = E;
}
public void setP() { // 初始化预测分析表
for (int i = 0; i 5; i++) {
for (int j = 0; j 6; j++) {
P[i][j] = error;
}
}
P[0][0] = -TE;
P[0][3] = -TE;
P[1][1] = -+TE;
P[1][4] = -ε;
P[1][5] = -ε;
P[2][0] = -FT;
P[2][3] = -FT;
P[3][1] = -ε;
P[3][2] = -*FT;
P[3][4] = -ε;
P[3][5] = -ε;
P[4][0] = -i;
P[4][3] = -(E);
// 打印出预测分析表
System.out.println( 已构建好的预测分析表);
System.out.println(----------------------------------------------------------------------);
for (int i=0; i6; i++) {
System.out.print( +Vt[i]);
}
System.out.println();
System.out.println(----------------------------------------------------------------------);
for (int i=0; i5; i++) {
System.out.print( +Vn[i]+ );
for (int j=0; j6; j++) {
int l = 0;
if (j0) {
l = 10-P[i][j-1].length();
}
for (int
您可能关注的文档
最近下载
- 浙江杭州余杭交通集团有限公司招聘笔试题库2023.pdf VIP
- 人工胆囊、人工胆囊设备和人工胆囊在胆囊手术中的应用.pdf VIP
- 重力与弹力高一上学期物理人教版2019必修第一册+.pptx VIP
- 胃癌的诊治现状与进展.pptx VIP
- 数控压装压力机 第2部分:技术条件.docx VIP
- 【课件】匀变速直线运动速度与时间的关系+课件-高一上学期物理人教版(2019)必修第一册.pptx VIP
- XX医院职能部门监管手术、麻醉授权管理督导、检查、总结、反馈及持续改进记录表.pdf VIP
- 电力调度数据网络接入技术规范及网络拓扑图.doc VIP
- ZZGA高频开关整流器使用说明书.doc
- 危重患者院内转运PPT.pptx VIP
文档评论(0)