概述
Java实现递归下降子程序
一、实验目的 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实 验的目的主要是加深对递归下降分析法的理解。
二、实验内容 程序输入/输出示例(以下仅供参考):
对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E- TG (2)G- +TG|—TG (3)G- ε (4)T- FS (5)S- FS|/FS (6)S- ε (7)F- (E) (8)F- i 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入一以#结束的符号串(包括+—/()i#):在此位置输入符号串例如:i+ii# (3)输出结果:i+ii#为合法符号串 备注:输入一符号串如 i+i*#,要求输出为“非法的符号串”。 注意: 1. 表达式中允许使用运算符(±*/)、分割符(括号)、字符 I,结束符#; 2. 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。
三、实验要求: 1. 对语法规则有明确的定义; 2. 编写的分析程序能够进行正确的语法分析; 3. 对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成
5
语法分析过程;
import java.util.Scanner;
public class RecursiveDrop {
//输入的表达式
static String expression;
//当前的符号
static Character sym;
//当前指针
static int index;
//出现错误语法了
static boolean hasErr;
public static void main(String []main){
Scanner input=new Scanner(System.in);
expression=input.next();
while (!expression.equals("end")){
expression+="#";
index=-1;
hasErr=false;
advance();
E();
if (hasErr){
error();
}
else if (sym=='#'){
System.out.println(expression.replace("#","")+"是合法的");
}else{
error();
}
expression=input.next();
}
}
public static void E(){
T();
G();
}
public static void G(){
if (sym=='+'||sym=='-'){
advance();
T();
G();
}
}
public static void T(){
F();
S();
}
public static void S(){
if (sym=='*'||sym=='/'){
advance();
F();
S();
}
}
public static void F(){
if (sym=='i')
advance();
else{
if (sym=='('){
advance();
E();
if (sym==')'){
advance();
}else {
hasErr=true;
System.out.println("遇到‘(’但是没有‘)’结尾");
}
}else {
hasErr=true;
System.out.println(expression.charAt(index-1)+""+sym+"不符合逻辑");
}
}
}
//把指针向前进一步
public static void advance(){
index++;
sym=expression.charAt(index);
}
//出错处理
public static void error(){
System.out.println(expression.replace("#","")+"是不合法的");
}
}
实验结果
1、输入:i/+i
输出:i/+i是不合法的
2、输入:i*(i+i
输出:i*(i+i是不合法的
3、输入:ii()
输出:ii()是不合法的
4、输入:i+i*
输出:i+i是不合法的
5、输入:i+ii
输出:i+ii是合法的
6、输入:i(i+i/i+i-i)-i+i/i
输出:i*(i+i/i+i-i)-i+i/i是合法的
最后
以上就是缥缈电灯胆为你收集整理的Java实现递归下降子程序Java实现递归下降子程序实验结果的全部内容,希望文章能够帮你解决Java实现递归下降子程序Java实现递归下降子程序实验结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复