资源简介

对于文法:
E->TG
G->+TG|-TG|ε
T->FS
S->*FS|/FS|ε
F->(E)|i
用递归下降分析法对任意输入的符号串进行分析,输入输出参考main函数。

资源截图

代码片段和文件信息

package shixi2;

import java.util.Scanner;

public class Main {

static String str;//整个字符串
static int ptr//游标
len//字符串长度
step;//步骤
static boolean right;

static boolean Advance() {//前进一个字符
if (ptr < len - 1) {
ptr++;
pri(““);
return true;
} else {
return false;
}
}

static void pri(String s) {//输出推导过程
step++;
System.out.println(step + “\t“ + str.charAt(ptr) + “\t“ + s + “\t“
+ str.substring(ptr));
}

static void E() {
pri(“E->TG“);
T();
G();
}

static void G() {
if (str.charAt(ptr) == ‘+‘) {
pri(“G->+TG“);
if (!Advance()) {
return;
}
T();
G();
} else if (str.charAt(ptr) == ‘-‘) {
pri(“G->-TG“);
if (!Advance()) {
return;
}
T();
G();
} else {
pri(“G->ε“);
}
}

static void T() {
pri(“T->FS“);
F();
S();
}

static void S() {
if (str.charAt(ptr) == ‘*‘) {
pri(“S->*FS“);
if (!Advance()) {
return;
}
F();
S();
} else if (str.charAt(ptr) == ‘/‘) {
pri(“S->/FS“);
if (!Advance()) {
return;
}
F();
S();
} else {
pri(“S->ε“);
}
}

static void F() {
if (str.charAt(ptr) == ‘(‘) {
pri(“F->(E)“);
if (!Advance()) {
return;
}
E();
if (str.charAt(ptr) == ‘)‘) {
if (!Advance()) {
return;
}
} else {
Error();
}
} else if (str.charAt(ptr) == ‘i‘) {
pri(“F->i“);
if (!Advance()) {
return;
}
} else {
Error();
}
}

static void Error() {
right = false;
pri(“Error!“);
if (!Advance()) {
return;
}
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
str = new String(sc.next());
ptr = step = 0;
right = true;
len = str.length();
System.out.println(“步骤\t当前\t产生式\t输入串“);
E();
if (right && ptr == len - 1) {
System.out.println(str + “ is leagal!“);
} else {
System.out.println(str + “ is illeagal!“);
}
}

}

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

     文件       2093  2009-03-18 22:55  shixi2\Main.java

     目录          0  2009-03-30 00:30  shixi2

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

                 2093                    2


评论

共有 条评论