我是靠谱客的博主 缥缈电灯胆,最近开发中收集的这篇文章主要介绍Java实现递归下降子程序Java实现递归下降子程序实验结果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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()
输出:i
i()是不合法的
4、输入:i+i*
输出:i+i是不合法的
5、输入:i+i
i
输出: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实现递归下降子程序实验结果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部