EE308FZ_Lab1-2

YUZUq YUZUq 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
The Link Your Classhttps://bbs.csdn.net/forums/MUEE308FZU202201
The Link of Requirement of This Assignmenthttps://bbs.csdn.net/topics/608745426
The Aim of This AssignmentTo achieve a program function, it can extract keywords of different levels from the C or C++ code files that are read in.
MU STU ID and FZU STU ID20124261_832002225

github Link:https://github.com/YUZUq/Lab1-for-EE308

1. PSP form for this work

Personal Software Process StagesTime (min)
Planning20
Analysis (including learning new knowledge)90
Development60
Test20
Postmortem & Process Improvement Plan20

2. Description of problem-solving ideas

  1. Need a method to read the c file.
  2. Use regular expression and stack to search keywords.
  3. Learn how to do unit test.

3. Design and implementation process

img

4. Code description.

  1. main method

    public static void main(String[] args) throws Exception {
         Scanner sc=new Scanner(System.in);
         System.out.println("Pleaase input the path of the code file.");
         String path=sc.nextLine();
         System.out.println("Pleaase input the completion level.");
         int level = Integer.parseInt(sc.nextLine());            //询问文件地址和任务等级
         Lab1 l = new Lab1();
         String s = l.read(path);            //字符串形式读文件
         if (level == 1) {            //根据等级不同完成任务
             lv1(s);
         } else if (level == 2) {
             lv2(s);
         } else if (level == 3) {
             lv3(s);
         } else if (level == 4) {
             lv4(s);
         }
         sc.close();
     }
    
  2. read the file

    public String read(String url) throws IOException {
         File file = new File(url);
         FileReader reader = new FileReader(file);
         BufferedReader br = new BufferedReader(reader);
         StringBuilder sb = new StringBuilder();
         String s;
         while ((s = br.readLine()) != null) {
             sb.append(s);
         }
         return sb.toString();
     }
    
  3. How to search key word

    public static int match(String str, String target) {            //查找关键词
         int start = 0;
         int count = 0;
         int length = target.length();
         while (true) {
             if(str.indexOf(target,start)!=-1 && !str.substring(str.indexOf(target,start)-1, str.indexOf(target,start)).matches("[a-zA-Z]")
                     && !str.substring(str.indexOf(target,start)+length, str.indexOf(target,start)+length+1).matches("[a-zA-Z]")) {
                 //关键词前后必须为非字母才能确认为关键词
                 count++;
                 start = str.indexOf(target,start);
                 start += length;
             } else {
                 break;
             }
         }
         return count;
     }
    
  4. Task 1 and task 2

    public static void lv1(String str) {
         int count = 0;
         String keyword[] = {"auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for",
                             "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef",
                             "unsigned", "union", "void", "volatile", "while"};
         for (int i = 0; i < keyword.length; i++) {
             count += match(str, keyword[i]);
         }
         System.out.println("total num: " + count);
     }
    
     public static void lv2(String str) {
         lv1(str);
         System.out.println("switch num: " + match(str, "switch"));
         String[] temp = str.split("switch");
         System.out.print("case num: ");
         for (int i = 1; i < temp.length; i++) {
             System.out.print(match(temp[i], "case") + " ");
         }
         System.out.println();
     }
    
  5. How to search if/else or if/else if

    public static int match2(String str, int level) {
         Stack<String> s1 = new Stack();
         Pattern pattern = Pattern.compile("else *if|else|if");
         Matcher matcher = pattern.matcher(str);
         int esif = 0;
         int ifes = 0;
         boolean noEsif = true;
         while (matcher.find()) {
             String subs = str.substring(matcher.start(), matcher.end());
             if (!subs.equals("else")) {            //向栈中存贮“if”/“else if”
                 s1.push(subs);
             } else {            //检索到“else”
                 while (!s1.peek().equals("if")) {            //栈最后一项为“else if”,说明是if else if结构
                     s1.pop();
                     if (noEsif) {
                         esif++;
                         noEsif = false;
                     }
                 }
                 if (noEsif == true) {            //栈最后一项为“if”,说明是if else结构
                     ifes++;
                 }
                 s1.pop();
                 noEsif = true;
             }
         }
         if (level == 3) {
             return ifes;
         } else {
             return esif;
         }
     }
    

    5. Unit test

import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.IOException;
import java.util.stream.Stream;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

public class test {
    Lab1 t = new Lab1();

    @ParameterizedTest
    @MethodSource("parameterDataProvider")
    void test(String url, int l, String result) throws IOException {
        t.read(url);
        assertEquals(result, t.toString());
    }

    public static Stream<Arguments> parameterDataProvider() {
        return Stream.of(
                Arguments.of("C:\\Users\\sunfu\\Desktop\\codeExample.c", 1, "total num: 35"),
                Arguments.of("C:\\Users\\sunfu\\Desktop\\codeExample.c", 2, "switch num: 2\ncase num: 3 2"),
                Arguments.of("C:\\Users\\sunfu\\Desktop\\codeExample.c", 3, "if-else num: 2"),
                Arguments.of("C:\\Users\\sunfu\\Desktop\\codeExample.c", 4, "if-elseif-else num: 2")
        );
    }
}

img

6. Summary

In this lab, I develop a Java project and tried to advance it, I found it is really important to have a plan and analysis before to do it. What's more I also tried to grasp the knowledge of markdown and how to upload project to github.

...全文

相关推荐

VDA 19.1_3rd edition_2026_English.rar

VDA 19.1_3rd edition_2026_English.rar

phyit

正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现,移植自MATLA.rar

正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现,移植自MATLA.rar

天天Matlab科研工作室

FCEMS燃料电池汽车能量管理控制、动力系统+驾驶员模型仿真、附说明文档及参考文献

内容概要:本文围绕燃料电池汽车能量管理控制系统(FCEMS)展开,系统阐述了其动力系统与驾驶员模型的仿真方法,并配套提供了详尽的说明文档及参考文献。研究深度融合线性车辆三自由度动力学模型与无迹卡尔曼滤波(UKF)技术,实现了对车辆横摆角速度、质心侧偏角及车速等关键状态的高精度估计,为优化能量管理策略奠定了坚实基础。整个仿真系统依托Carsim与Simulink联合仿真平台构建,有效保障了模型的真实性和工程实用性。此外,研究还涵盖了燃料电池供氢系统的精细化建模与先进控制策略,完整呈现了从核心部件建模到整车系统集成的全流程技术方案。; 适合人群:具备一定车辆工程、自动化或电力电子背景的研究生、科研人员及从事新能源汽车研发的工程师。; 使用场景及目标:①开展燃料电池汽车的能量管理控制策略研究与仿真验证;②进行车辆动力学状态估计与联合仿真平台搭建;③学习基于Simulink/Carsim的新能源汽车系统建模方法;④为硕士论文复现或科研项目提供全面的技术支持与参考。; 阅读建议:建议读者结合提供的仿真模型、PPT说明与参考文献,逐步复现仿真流程,重点关注UKF状态估计算法与能量管理逻辑的实现细节,同时利用所提供的网盘资源下载完整资料以便深入学习与扩展应用。

茜姐_博客

三相维也纳PFC整流器闭环仿真控制策略研究-中点电位平衡、无功补偿与双载波SVPWM(Simulink仿真实现)

内容概要:本文系统研究了三相维也纳PFC整流器的闭环仿真控制策略,聚焦于中点电位平衡、无功补偿以及双载波SVPWM调制三大关键技术问题。基于Simulink平台构建了30kW三相维也纳整流器的完整仿真模型,采用零序电流注入法实现直流侧中点电位的精确控制,有效抑制电压偏移,提升系统稳定性。结合无功电流补偿策略,显著改善输入功率因数,降低谐波畸变率。创新性地引入双载波SVPWM(马鞍波/羊角波)调制技术,优化开关调制过程,改善输出电压波形质量,减少开关损耗,提高整体转换效率。控制系统实现了对输入电流与输出电压的双闭环精确调控,仿真结果验证了该策略在动态响应速度、稳态控制精度及抗负载扰动能力方面的优越性能。; 适合人群:从事电力电子变换器设计、新能源发电系统、电动汽车充电技术及相关领域的高校研究生、科研人员以及具备电力电子与自动控制理论基础的工程技术人员。; 使用场景及目标:①为高功率密度、高效率PFC整流器的研发提供理论依据与仿真验证手段;②解决三电平整流器中常见的中点电位失衡难题;③探索先进SVPWM调制技术在实际系统中的应用潜力;④支撑新能源并网、工业电源、车载充电机等对电能质量要求严苛的应用场景下的核心电力电子装置开发。; 阅读建议:建议读者结合提供的Simulink仿真模型进行实践操作,深入理解控制器结构设计、零序注入实现方式、双载波生成逻辑及PI参数整定方法,并可通过修改负载条件或电网参数开展对比仿真,以全面掌握系统动态特性,后续可进一步推进至硬件原型实验验证。

优化算法侠_科研

汽车电动助力转向EPS系统建模仿真、二自由度+上下转向柱等、附参考文献

内容概要:本文围绕汽车电动助力转向(EPS)系统展开,重点介绍基于线性化模型的EPS系统建模仿真方法,涵盖二自由度车辆动力学模型与上下转向柱的动力学建模,深入探讨转向系统的控制策略设计与仿真验证。通过Matlab/Simulink工具实现系统建模与仿真分析,并结合Carsim与Matlab联合仿真手段,提升模型的真实性和工程参考价值。同时,研究中引入参考文献支撑,确保理论依据充分,内容兼具学术性与实用性。 适合人群:具备车辆工程或自动化相关背景,熟悉Matlab/Simulink仿真环境,从事汽车底盘控制、转向系统开发或智能驾驶研究的研发人员与研究生。 使用场景及目标:①开展电动助力转向系统(EPS)的建模与控制算法设计;②利用联合仿真平台(如Carsim与Matlab)进行车辆操纵稳定性分析;③研究转向柱动力学特性对转向手感的影响;④作为车辆动力学课程或科研项目的仿真案例参考。 阅读建议:建议读者结合文中提及的参考文献,系统学习EPS控制理论基础,并动手实践Matlab/Simulink仿真模型,通过调整控制参数与工况设置,深入理解系统响应特性,进一步拓展至多自由度整车模型与先进控制策略(如H∞、MPC)的应用研究。

荔枝科研社
评论
收藏 已收藏
分享
返回顶部
YUZUq
FZU-SE-EE308-2022秋 286 成员 1,014 内容