• 大小: 24KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-28
  • 语言: Java
  • 标签: lr1  java  

资源简介

编译原理实验的语法分析器 lr1 只有一个main.java 差不多900行(加上注释) 有详细的注释 如有问题 可切磋改进 由于老师给的是Pascal的文法 当然也可自行修改 出错处理不是很完善,$表示空,#表示结束符 注意文法要有适当的空格 ,从output.dat文件输入,文件中是词法分析的输出(部分,不影响)

资源截图

代码片段和文件信息

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.Map;

public class Main {

public static final int LR0 = 1;
public static final int LR1 = 2;
public static final int SLR = 3;
public static final int OUT = 1;
public static final int IN = 2;
public static final int ERROR_OUT_OUT = 9;
public static final int ERROR_IN_OUR = 10;

private String path = “C:\\Users\\Administrator\\Desktop\\LR.txt“;
private ArrayList grammar = new ArrayList();
private ArrayList> prodution = new ArrayList>();
private ArrayList> projects = new ArrayList>();
private ArrayList terminal = new ArrayList();
private ArrayList nonTerminal = new ArrayList();
private ArrayListject>> DFA = new ArrayListject>>();
private ArrayListject>>> projectUnions = new ArrayListject>>>();
private ArrayListject>> follow = new ArrayListject>>();
private ArrayListject>> analyseTableAction = new ArrayListject>>();
private ArrayListject>> analyseTableGoto = new ArrayListject>>();
private Mapject object> searchs = new HashMapject object>();
private ArrayListject>> Go = new ArrayListject>>();

public void readFile() throws IOException {
File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;

while ((line = br.readLine()) != null)
grammar.add(line);
}

public void spilt() {
String left right;
String[] temp;

temp = grammar.get(0).split(“ “);
for (String s : temp)
nonTerminal.add(s);

temp = grammar.get(1).split(“ “);
for (String s : temp)
terminal.add(s);

for (int i = 2; i < grammar.size(); i++) {
String line = grammar.get(i);
if (!line.startsWith(“Follow“)) {
temp = line.split(“ -> “);
left = temp[0];
right = temp[1];
temp = right.split(“ \\| “);
for (String s : temp) {
Map map = new HashMap();
map.put(“left“ left);
if (s.equals(“$“))
s = ““;
map.put(“right“ s);
prodution.add(map);
}

}
getAllFollow();
}

public void productionchangeToProject() {

for (Map map : prodution) {
String left = map.get(“left“);
String right = map.get(“right“);

for (int i = 0; i < right.length() + 1; i++) {
String newString;
if (right.equals(“$“)) {
newString = “.“;
i = 2;
} else {
String ltmp = right.substring(0 i);
String rtmp = right.substring(i right.length());

newString = ltmp + “.“ +

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        301  2014-04-28 00:08  LRAnalyse\.classpath

     文件        385  2014-04-28 00:08  LRAnalyse\.project

     文件        598  2014-04-28 00:08  LRAnalyse\.settings\org.eclipse.jdt.core.prefs

     文件      21784  2014-12-19 20:55  LRAnalyse\bin\Main.class

     文件      29590  2014-05-07 14:34  LRAnalyse\java\Main.java

     文件       1255  2014-12-10 14:47  LRAnalyse\LR.txt

     文件       2126  2014-12-13 13:26  LRAnalyse\LRTest.txt

     文件        200  2014-12-10 14:47  LRAnalyse\output.dat

     文件      27565  2014-12-19 20:55  LRAnalyse\src\Main.java

     文件        280  2014-12-10 13:32  LRAnalyse\新建文本文档.txt

     目录          0  2014-12-02 08:18  LRAnalyse\.settings

     目录          0  2014-12-02 08:18  LRAnalyse\bin

     目录          0  2014-12-02 08:18  LRAnalyse\java

     目录          0  2014-12-02 08:18  LRAnalyse\src

     目录          0  2014-12-19 20:42  LRAnalyse

----------- ---------  ---------- -----  ----

                84084                    15


评论

共有 条评论