资源简介
通过Java完成LL(1)语法分析器。
(1)通过文件扫描,识别出终结符与非终结符;
(2)求解first集与follow集;
(3)根据first集与follow集构建预测分析表;
(4)写总控程序;
(5)进行字符串匹配。
代码片段和文件信息
/*
* 建立预分析表
*/
public class BuildTable {
public void buildForeTable() {
staticData.predictionAnalisis=new String[staticData.nfinalSign.length()][staticData.finalSign.length()];
//构建分析表
for (int i = 0; i < staticData.predictionAnalisis.length; i++) {
for (int j = 0; j < staticData.predictionAnalisis[i].length; j++) {
String temp=““+staticData.finalSign.charAt(j);
if(staticData.firstSet[i].contains(temp)){//若相等则将对应的产生式添加到表中
//字符集的位置
int index=staticData.firstSet[i].indexOf(temp);
staticData.predictionAnalisis[i][j]=staticData.firstProductType[i][index];
}else if(staticData.firstSet[i].contains(““+“@“)&&staticData.followSet[i].contains(temp)){
staticData.predictionAnalisis[i][j]=“@“;
}else {
staticData.predictionAnalisis[i][j]=“n“;
}
}
}
/*
* 将构建的预测分析表输出
*/
System.out.print(“★ “);
for (int i = 0; i < staticData.finalSign.length(); i++) {
System.out.printf(“%c\t“staticData.finalSign.charAt(i));
}
System.out.println();
int i=0;
for (String[] strings : staticData.predictionAnalisis) {
System.out.print(staticData.nfinalSign.charAt(i++)+“ “);
for (String string : strings) {
System.out.printf(“%s\t“string+“ “);
}
System.out.println();
}
System.out.println(“非终结符:“+staticData.nfinalSign);
System.out.println(“终结符:“+staticData.finalSign);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 301 2018-06-02 21:55 LL(1)\.classpath
文件 381 2018-06-02 21:55 LL(1)\.project
目录 0 2018-06-02 22:01 LL(1)\.settings\
文件 88 2018-06-02 22:02 LL(1)\.settings\org.eclipse.core.resources.prefs
文件 598 2018-06-02 21:55 LL(1)\.settings\org.eclipse.jdt.core.prefs
目录 0 2018-09-18 20:06 LL(1)\bin\
文件 2163 2018-09-18 20:06 LL(1)\bin\BuildTable.class
文件 3404 2018-09-18 20:06 LL(1)\bin\FirstSet.class
文件 3018 2018-09-18 20:06 LL(1)\bin\FollowSet.class
目录 0 2018-09-18 20:06 LL(1)\bin\grammerRules\
文件 25 2018-05-22 13:18 LL(1)\bin\grammerRules\grammerRules1
文件 23 2018-05-22 13:15 LL(1)\bin\grammerRules\grammerRules2
文件 28 2018-05-22 13:16 LL(1)\bin\grammerRules\grammerRules3
文件 28 2018-05-22 13:17 LL(1)\bin\grammerRules\grammerRules4
文件 42 2018-06-01 18:11 LL(1)\bin\grammerRules\grammerRules5
文件 2107 2018-09-18 20:07 LL(1)\bin\Main.class
文件 581 2018-09-18 20:06 LL(1)\bin\staticData.class
文件 5036 2018-09-18 20:06 LL(1)\bin\TakeSign.class
文件 2367 2018-09-18 20:06 LL(1)\bin\TotalControl.class
目录 0 2018-06-03 11:10 LL(1)\src\
文件 1567 2018-06-03 16:04 LL(1)\src\BuildTable.java
文件 4169 2018-06-03 12:33 LL(1)\src\FirstSet.java
文件 4640 2018-06-03 11:08 LL(1)\src\FollowSet.java
目录 0 2018-06-03 23:51 LL(1)\src\grammerRules\
文件 25 2018-05-22 13:18 LL(1)\src\grammerRules\grammerRules1
文件 23 2018-05-22 13:15 LL(1)\src\grammerRules\grammerRules2
文件 28 2018-05-22 13:16 LL(1)\src\grammerRules\grammerRules3
文件 28 2018-05-22 13:17 LL(1)\src\grammerRules\grammerRules4
文件 42 2018-06-01 18:11 LL(1)\src\grammerRules\grammerRules5
文件 1730 2018-09-18 20:07 LL(1)\src\Main.java
文件 482 2018-06-03 09:12 LL(1)\src\staticData.java
............此处省略2个文件信息
评论
共有 条评论