资源简介
能够根据用户给定的任意文法,采用LL分析方法测试句式是否符合给定的语法规范。
改写文法为等价的LL(1)文法,消除左递归,消除左因子,求每个非终结符的First集合和Follow集合,构造预测分析表,输入测试句式,给出判定结果,并说明判定依据。
参见博客代码介绍,功能全面。
代码片段和文件信息
package ch02;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.linkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
public class Function {
public static List inputqueue=new ArrayList(); //存放输入文法的非终结符顺序
public static StringBuilder grammar = new StringBuilder(); //存放文法
public static List oldListItems = new ArrayList<>(); //存放文法的产生式
public static Set MarkSet=new HashSet(); //用来存放已经消除了左递归的式子的左侧
public static List newList = new ArrayList<>(); //存放消除左递归后的文法
public static List clearLeftList = new ArrayList<>(); //消除左因子后的文法
public static List oneFirstList = new ArrayList<>(); //存放每一个非终结符的FIRST集
public static List oneFollowList = new ArrayList<>(); //存放每一个非终结符的FOLLOW集
public static Stack analyzeStatck = new Stack();//符号栈
public static Set setLeftString = new linkedHashSet<>(); //用来记录一个式子是否存在左因子
public static Set marksetfollow=new HashSet();
public static String action1 = ““;
public static String action2 = ““;
//从指定文件中读取文法
public static String readGrammarFile(String path) throws IOException {
File file = new File(path);
@SuppressWarnings(“resource“)
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String readline;
while ((readline = bufferedReader.readLine()) != null) {
grammar.append(readline + “\n“);
inputqueue.add(readline.charAt(0)+““);
}
return grammar.toString();
}
//获得文法的产生式
public static List getGrammar(String scanner) {
List oldList = new ArrayList<>();
String[] grammarItems = scanner.split(“ |\n“);
for (int i = 0; i < grammarItems.length; i++) {
oldList.add(grammarItems[i]);
}
return oldList;
}
//获得每一条产生式
public static List getGrammarItems(String scanner) {
List oldList = new ArrayList<>();
String[] grammarItems = scanner.split(“ |\n“);
for (int i = 0; i < grammarItems.length; i++) {
oldList.add(grammarItems[i]);
int index = grammarItems[i].indexOf(“-“);//第一次出现
String str = grammarItems[i].substring(0 index);
String[] items = grammarItems[i].split(“>|\\|“);
// 添加每一条产生式
for (int k = 1; k < items.length; k++)
oldListItems.add(str + “-->“ + items[k]);
}
return oldListItems;
}
//判断非终结符集合中是否包含了某一个非终结符
public static boolean isContain(List vn String str) {
for (int i = 0; i < vn.size(); i++) {
if (vn.get(i).equals(str)) {
return true;
}
}
return false;
}
//获得所有非终结符(文件读入的文法为String)
public static List getVN(String grammarItems) {
List vn = new ArrayList<>();
String[] string = grammarItems.split(“\n“);
for (int i = 0; i < string.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-05-30 22:25 ch02\
文件 301 2019-05-10 22:17 ch02\.classpath
文件 380 2019-05-10 22:17 ch02\.project
目录 0 2019-05-30 20:31 ch02\.settings\
文件 598 2019-05-10 22:17 ch02\.settings\org.eclipse.jdt.core.prefs
文件 71 2019-05-12 22:18 ch02\111.txt
文件 30 2019-05-13 15:52 ch02\222.txt
文件 41 2019-05-13 20:07 ch02\333.txt
文件 30 2019-05-13 20:09 ch02\444.txt
文件 22 2019-05-28 17:26 ch02\555.txt
目录 0 2019-05-30 20:47 ch02\bin\
目录 0 2019-05-30 20:47 ch02\bin\ch02\
文件 38 2019-05-11 22:06 ch02\bin\ch02\data.txt
文件 17302 2019-05-13 11:55 ch02\bin\ch02\data1.txt
文件 24272 2019-05-30 22:16 ch02\bin\ch02\Function.class
文件 5701 2019-05-30 22:19 ch02\bin\ch02\MainTest.class
目录 0 2019-05-30 20:31 ch02\src\
目录 0 2019-05-30 22:25 ch02\src\ch02\
文件 27783 2019-05-30 22:16 ch02\src\ch02\Function.java
文件 4698 2019-05-30 22:19 ch02\src\ch02\MainTest.java
- 上一篇:电力系统课程设计
- 下一篇:工资管理系统数据库系统设计
相关资源
- 软件测试技术大全:测试基础、流行
- SAEJ1939 全部资料打包中英文
- Modelsim学习资料很全
- objc-io中文书籍6本全集2019epud.zip
- ServiceStack V3.9 全部dll
- 过老巷安全技术探讨
- 高度重视并强化民爆生产线规范化安
- 电信企业网安全体系建设解决方案
- APQP全套文件模板
- 条码字体大全(39码128码等字体条码)
- 全国移动联通电信基站数据含经度,
- 易语言COM组件支持模块全套源码
- springcloud 微服务(全套视频)
- delphi中全面控制excel
- 2016全球互联网技术大会PPT
- Google架构安全白皮书
- 不可逆性类完备随机过程的全拓展方
- 全球地址数据库2019最新版
- OGC Discrete Global Grid Systems 全球离散网
- IBM System Storage SAN04B-R多协议路由器安
- 全新惠普 StorageWorks DAT72X6自动加载磁
- 天融信从容应对保险业网络安全威胁
- IBM全套visio图标
- springboot全套教程2018年2.0版本
- 内存SPD文件大全包括多年自己收集的
- HP 方案:为中型企业实现全天候业务
- 惠普模块化智能阵列MSA家族全面简化
- F5 GTM全局负载均衡配置指导书
- AI人工智能学习资料全套
- 电子书阅读器大全可读10种常用格式
评论
共有 条评论