• 大小: 24KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2021-08-12
  • 语言: 其他
  • 标签:   

资源简介

能够根据用户给定的任意文法,采用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

评论

共有 条评论