实验:使用Java实现预测分析法设计与实现

本文档详细介绍了使用Java实现预测分析法进行语法分析程序设计的实验过程,包括实验目的、内容、方法、步骤和结果。实验旨在加深对语法分析器工作原理的理解,掌握预测分析法,并通过IntelliJ IDEA实现一个简单的语法分析程序,能够对输入的程序段进行语法翻译。实验结果显示,程序能正确地进行语法分析,符合预期。
摘要由CSDN通过智能技术生成

一、实验目的

  1. 加深对语法分析器工作过程的理解;
  2. 加强对预测分析法实现分析程序的掌握;
  3. 能够采用一种编程语言实现简单的语法分析程序;
  4. 能够使用自己编写的分析程序对简单的程序段进行语法翻译

二、实验内容

  用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。

三、实验方法

  1. 实验方法:采用Java程序语言进行设计,有控制台根据提示语句进行输入
  2. 实验原理:预测分析法
  3. 实验工具:IntelliJ IDEA

四、实验步骤

  1. 定义目标语言的语法规则
  2. 求解预测分析需要的符号集和分析表
  3. 依次读入测试用例,根据预测分析的方法进行语法分析,直到源程序结束
  4. 对遇到的语法错误做出错误处理

五、实验结果

  1. 实验输入:
请输入非终结符: 
ETF
请输入终结符: 
+*()i
请输入语法规则:
E->E+T|T
T->T*F|F
F->(E)|i

请输入测试用例:
(i)*i
  1. 实验输出:
    在这里插入图片描述

六、实验结论

  实验利用自定义的源代码实现了预测分析法,实验结果正确,符合预期结果。
  源代码:

package exercise2;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class GrammaticalAnalysis {
   
    //非终结符集
    static List<String> noTerminal = new ArrayList<>();
    //终结符集
    static List<String> terminal = new ArrayList<>();
    //语法规则存储
    static String[][] grammarRules;
    //消除左递归后语法规则存储
    static String[][] grammar_rules;
    static String[][] newGrammer;
    //文法开始符号
    static String init;
    //FIRST集
    static String[][] firstSet;
    //FOLLOW集
    static String[][] followSet;
    //LL(1)分析表
    static int[][] analysis;

    public static void main(String[] args) {
   
        Scanner input = new Scanner(System.in);
        //读入非终结符
        System.out.println("请输入非终结符: ");
        String noTer = input.nextLine();
        for (int i = 0; i < noTer.length(); i++){
   
            noTerminal.add(String.valueOf(noTer.charAt(i)));
        }
        //读入终结符
        terminal.add("#");
        System.out.println("请输入终结符: ");
        String ter = input.nextLine();
        for (int i = 0; i < ter.length(); i++){
   
            terminal.add(String.valueOf(ter.charAt(i)));
        }
        //初始化
        grammarRules = new String[noTer.length()][2];
        grammar_rules = new String[noTer.length() * 2][2];
        newGrammer = new String[noTerminal.size() * 5][3];
        //输入语法规则
        System.out.println("请输入语法规则:");
        String grammar = input.nextLine();
        init = String.valueOf(grammar.charAt(0));
        do {
   
            divide(grammar);
            eliminate(grammar);
            grammar = input.nextLine();
        }while (!grammar.equals(""));
        //请输入测试用例
        System.out.println("请输入测试用例:");
        String test = input.nextLine();
        //输出信息
        System.out.println("------------------基本信息-----------------------");
        System.out.println("产生式:");
        output(grammarRules);
        System.out.println("终结符:");
        for (int i = 0; i < terminal.size(); i++){
   
            System.out.print(terminal.get(i) + "     ");
        }
        System.out.println();
        System.out.println("非终结符:");
        for (int i = 0; i < noTerminal.size(); i++){
   
            System.out.print(noTerminal.get(i) + "     ");
        }
        System.out.println();
        System.out.println("读取测试:");
        System.out.println(test);
        System.out.println("-------------------消除左递归---------------------");
       
1、下载并安装mysql,将脚本执行至数据库中; 2、配置java环境,使用jdk8,配置环境变量,下载IntelliJ IDEA 2019.2.4,该工具为java代码编译器 3、下载Maven,配置至环境变量(百度搜索很多),将构建器为Maven,类库配置成阿里库(方法:百度搜索很多很多) 4、将工程导入后,在application-local.yml文件中配置数据库 5、在logback-prod.xml文件中配置log日志 6、配置完毕后,即可启动 访问地址:http://localhost:8082/anime/login.html 用户名:admin 密码:admin V:china1866 1、 登录 2、 首页 3、 权限管理-用户管理 4、 权限管理-添加用户数据 5、 交通数据管理-查看交通数据 6、 交通数据管理-添加交通数据 7、 交通预测-交通数据预测 脚本: CREATE TABLE `traffic_data_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `trafficId` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通数据编号', `trafficContent` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通状况', `trafficSection` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通路段', `trafficMan` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报人', `trafficDate` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报时间', `status` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通状态', PRIMARY KEY (`id`) ) COMMENT='交通数据表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=44 ; CREATE TABLE `sys_user_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `role_id` INT(11) NULL DEFAULT NULL COMMENT '角色ID', `user_id` VARCHAR(50) NOT NULL COMMENT '用户ID', `user_name` VARCHAR(100) NOT NULL COMMENT '用户名', `status` INT(11) NOT NULL COMMENT '是否有效0:false\\\\1:true', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL, `password` VARCHAR(128) NOT NULL, `tenantcode` VARCHAR(50) NOT NULL, `diskId` VARCHAR(500) NULL DEFAULT NULL, `remarks` VARCHAR(500) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='系统用户表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ; CREATE TABLE `sys_role_t` ( `role_id` INT(11) NOT NULL COMMENT '角色ID', `role_name` VARCHAR(200) NOT NULL COMMENT '权限名称', `status` INT(11) NOT NULL COMMENT '是否有效0:true\\\\1:false', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL ) COMMENT='系统角色表' COLLATE='utf8_general_ci' ENGINE=InnoDB ; CREATE TABLE `sys_menu_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `parent_id` VARCHAR(50) NOT NULL COMMENT '父节点ID', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `menu_name` VARCHAR(200) NOT NULL COMMENT '菜单名称', `menu_url` VARCHAR(200) NULL DEFAULT NULL COMMENT '菜单URL', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='菜单表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=33 ; CREATE TABLE `sys_menu_role_relation_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `role_id` VARCHAR(50) NOT NULL COMMENT '角色ID', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='角色与菜单关系表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值