编译原理-词法分析器的java实现

Java 实现词法分析器(编译原理) 不多说,直接贴代码 package edu.software.compile; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * 1 基本字 * 2 标识符 * 3 常数 阅读详情

实验步骤

编程环境

eclipse开发软件

实验步骤

1. 构建DFA

状态转换图

流程图

流程图

3. 代码实现分析

  1. 给标识符、常量等给定一个标识符
  2. 给定一个字符串,将字符串转换为字符数组
  3. 判断当前读入的字符是什么字符
  4. 根据DFA来判断和输出

4.编号规定

001:加法运算符 +
002:减法运算符 -
003:乘法运算符 *
004:除法运算符 /
005:左括号 (
013:右括号 )
008.标识符
010.整数
011.等号运算符 ==
012.浮点数
014:错误字段 error
015:赋值运算符 =
016:大于号 >
017:小于号 <
018:不等于号 !=
019:小于等于号 <=
020:大于等于号 >=
021:{ 左中括号 {
022:} 右中括号 }
023: ; 分号 ;

import java.util.*;

/*
编号规定:
001:加法运算符
002:减法运算符
003:乘法运算符
004:除法运算符
005:左括号
013:右括号	
008.标识符
010.整数
011.等号运算符
012.浮点数
014:错误字段
015:赋值运算符
016:大于号
017:小于号 
018:不等于号
019:小于等于号
020:大于等于号
021:{ 左中括号
022:} 右中括号
023: ;	分号
*/
public class lexicalAnalysis {
    private static char[] Code;//转化为字符数组
    public static ArrayList<String> tokens=new ArrayList<>();//用于之后的语法分析传值使用

    public static void main(String[] args) { 
//        String s = "public static void main(String[] args) { 
//      String s = "abc2@e=num2+12.3.23)*123-12.#;#";//输入符号串
//        String s = "public static void main(String[] args) { \r\n" + 
//        		"        String s = \"abc2@e=num2+12.3.23)*123-12.#\";#";//表达式为A1=1.2+3*(4-6/3)
    	String s = "vhguiyv7=-okllpl,-=popl'>=><==#";
    	
        StartLexicalAnalysis(s);
    }

    public static void StartLexicalAnalysis(String s) {//开始进行语法分析
        if (IsCode(s)) {//判断
        	tokens.add("begin") ;
        System.out.println("当前输入符号为:" + s.substring(0,s.length()-1));
        System.out.println("词法分析结果如下:");
        StartState(0, 0);
        }
    }
    private static boolean IsCode(String s){//判断源代码是否为空,为空则不能进行词法分析
        if (s.isEmpty()||s.toCharArray()[0]=='#') {
            System.out.println("源代码为空,无法进行词法分析!");
            return false;
        }
        else {
            Code = s.toCharArray();
            return true;
        }

    }

    private static void StartState(int basicPointer, int currentPointer)//状态0,初始状态
    {

        if (Code[currentPointer] == '#') {
            System.out.println("词法分析结束");
            tokens.add("end") ;
        }
        else if (IsEqual(Code[currentPointer]))//如果当前字符是等于号进入EqualState
        {
            EqualState(currentPointer,basicPointer);
        }
        else if (IsAdd(Code[currentPointer]))//如果当前字符是加号进入AddState
        {
            AddState(currentPointer);
        }
        else if (IsSub(Code[currentPointer]))//如果当前字符是减号进入SubState
        {
            SubState(currentPointer);
        }
        else if (IsMul(Code[currentPointer]))//如果当前字符是乘号进入MulState
        {
            MulState(currentPointer);
        }
        else if (IsDiv(Code[currentPointer]))//如果当前字符是除号进入DivState
        {
            DivState(currentPointer);
        }
        else if (IsLParent(Code[currentPointer]))//如果当前字符是左括号进入LParentState
        {
            LParentState(currentPointer);
        }
        else if (IsRParent(Code[currentPointer]))//如果当前字符是右括号进入RParentState
        {
            RParentState(currentPointer);
        }

        else if (IsAlpha(Code[currentPointer]))//如果当前字符是字母号进入IdentState
        {
            IdentState(basicPointer, currentPointer + 1);//是字母就进入状态6
        }
        else if (IsDigit(Code[currentPointer]))//如果当前字符是数字进入IntState
        {
            IntState(basicPointer, currentPointer + 1);//是数字就进入状态7
        }
        else if ( IsGreater(Code[currentPointer]) ) 
        { //如果当前字符是大于号
			GreaterState(basicPointer, currentPointer + 1);
		}
        else if ( IsLess(Code[currentPointer]) )
        { //如果当前字符是小于号
			LessState(basicPointer, currentPointer + 1);
		}
        else if ( IsExc(Code[currentPointer]) )
        { //如果当前字符是!
			ExcState(basicPointer, currentPointer + 1);
		}
        else if ( IsLZKH(Code[currentPointer]) )
        { //如果当前字符是{
        	LZKHState(basicPointer, currentPointer);
		}
        else if ( IsRZKH(Code[currentPointer]) )
        { //如果当前字符是}
        	RZKHState(basicPointer, currentPointer);
		}
        else if ( IsFH(Code[currentPointer]) )
        { //如果当前字符是;
        	FHState(basicPointer, currentPointer);
		}
        else {

            System.out.println("(014,错误," + Code[currentPointer] + ")");
            String tempSt="014,"+Code[currentPointer];
            tokens.add(tempSt);
            StartState(basicPointer + 1, currentPointer + 1);
        }
    }

    
    private static void FHState(int basicPointer, int j) {
    	System.out.println("(023,分号," + Code[j] + ")");
        String tempSt="023,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
	}

	private static void RZKHState(int basicPointer, int j) {
		System.out.println("(022,右中括号," + Code[j] + ")");
        String tempSt="022,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
	}

	private static void LZKHState(int basicPointer, int j) {
		System.out.println("(021,左中括号," + Code[j] + ")");
        String tempSt="021,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
	}

	private static void ExcState(int basicPointer, int j) {
    	if ( Code[j] == '=' ) {
			ExcState(basicPointer,j+1);
		}else {
			if ( j - basicPointer == 2 ) {
				System.out.print("(018,不等于号,");
				String tempSt = "!" ;
				printA(basicPointer,j,tempSt);
			}else {
				System.out.print("(014,错误," );
	            String tempSt="014,";
	            printA(basicPointer,j,tempSt);
			} 
		}
	}
 
	private static void LessState(int basicPointer, int j) {
		if ( Code[j] == '=' ) {
			LessState(basicPointer,j+1);
		}else {
			if ( j - basicPointer == 2 ) {
				System.out.print("(019,小于等于号,");
				String tempSt = "<" ;
				printA(basicPointer,j,tempSt);
			}else if (j - basicPointer == 1) {
				System.out.print("017,小于号," + Code[j-1] + ")");
			    String tempSt="017,"+Code[j-1];
		        tokens.add(tempSt);
		        StartState(j + 1, j + 1);
			}
			else {
				System.out.print("(014,错误," );
	            String tempSt="014,";
	            printA(basicPointer,j,tempSt);
			} 
		}
	}

	private static void GreaterState(int basicPointer, int j) {
		if ( Code[j] == '=' ) {
			GreaterState(basicPointer,j+1);
		}else {
			if ( j - basicPointer == 2 ) {
				System.out.print("(020,大于等于号,");
				String tempSt = ">" ;
				printA(basicPointer,j,tempSt);
			}else if (j - basicPointer == 1) {
				System.out.println("(016,大于号," + Code[j-1] + ")");
			    String tempSt="016,"+Code[j-1];
		        tokens.add(tempSt);
		        StartState(j , j + 1);
			}
			else {
				System.out.print("(014,错误," );
	            String tempSt="014,";
	            printA(basicPointer,j,tempSt);
			} 
		}
	}

	private static void EqualState(int j, int basicPointer)//表示字符为等号运算符
    {  
    	if ( IsEqual(Code[ j+1 ]) ) {
			EqualState(j+1, basicPointer);
		}else {
			if ( j - basicPointer == 1 ) {
				System.out.print("(011,等于号,");
				String tempSt="011," ;
				printA(basicPointer,j+1,tempSt);
			}else if (j - basicPointer == 0) {
				//赋值运算符
				System.out.println("(015,赋值运算符," + Code[j] + ")");
			    String tempSt="015,"+Code[j];
		        tokens.add(tempSt);
		        StartState(j + 1, j + 1);
			}else {
				//错误代码
				System.out.print("(014,错误," );
	            String tempSt="014,"; 
	            printA(basicPointer,j+1,tempSt); 
			}
		}
    	
//        System.out.println("(011,等于号," + Code[j] + ")");
//        String tempSt="011,"+Code[j];
//        tokens.add(tempSt);
//        StartState(j + 1, j + 1);
    }

    private static void AddState(int j)//表示字符为加法运算符
    {
        System.out.println("(001,加号," + Code[j] + ")");
        String tempSt="001,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void SubState(int j)//表示字符为减法运算符
    {
        System.out.println("(002,减号," + Code[j] + ")");
        String tempSt="002,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void MulState(int j)//表示字符为乘法运算符
    {
        System.out.println("(003,乘号," + Code[j] + ")");
        String tempSt="003,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void DivState(int j)//表示字符为除法运算符
    {
        System.out.println("(004,除号," + Code[j] + ")");
        String tempSt="004,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void LParentState(int j)//字符为左括号
    {
        System.out.println("(005,左括号," + Code[j] + ")");
        String tempSt="005,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void RParentState(int j)//字符为右括号
    {
        System.out.println("(013,右括号," + Code[j] + ")");
        String tempSt="013,"+Code[j];
        tokens.add(tempSt);
        StartState(j + 1, j + 1);
    }

    private static void IdentState(int i, int j)//标识符
    {
        //Code[i]为准标识符的第一个字符,是个字母 ,而Code[j-1]是字母或数字
        if (IsDigit(Code[j]) || IsAlpha(Code[j]))
        //如果当前字符仍然为字母或数字则再次进入IdentState
        {
            IdentState(i, j + 1);
        } else//如果当前字符为非数字及字母字符,则表明Code[i]~Code[j-1]这一段是标识符
        {
            System.out.print("(008,标识符,");
            String tempSt="008,";
            printA(i, j, tempSt);
        }
    }

    private static void IntState(int i, int j)//状态7,准实数
    {
        //Code[i]为准实数的第一个字符,是个字母 ,而Code[j-1]是数字或小数点
        if (IsDigit(Code[j]))//如果当前字符仍然是数字,则再次进入IntState
        {
            IntState(i, j + 1);
        }
        if (Code[j] == '.')//如果当前字符是小数点,进入PointState
        {
            PointState(i, j + 1);
        }
        if ((Code[j] != '.') && !IsDigit(Code[j]))
        //如果当前字符既不为小数点也不是数字 ,则表明Code[i]~Code[j-1]这一段是个实数
        {
            System.out.print("(010,整数,");
            String tempSt="010,";
            printA(i, j, tempSt);
        }
    }

    private static void PointState(int i, int j)//整数后接个小数点的中间态
    {
        //Code[i]~Code[j-1]之中含有小数点
        if (!IsDigit(Code[j])) {//小数点后还是小数点或者不是数字时报错
            System.out.print("(014,错误,");
            String tempSt="014,";
            int q = i;//从Code[i]开始算起
            while ((IsDigit(Code[q])) || (Code[q]) == '.')
            //直接相连的数字或小数点都属于这个无效字段的一部分
            {
                tempSt=tempSt+Code[q];
                System.out.print(Code[q]);
                q++;
            }
            System.out.println(")");
            tokens.add(tempSt);
            //Code[q]此时为无效字段的下一个字符
            StartState(q, q);

        }
        if (IsDigit(Code[j]))//如果当前字符是数字,则进入FloatState
        {
            FloatState(i, j + 1);
        }
    }

    private  static void FloatState(int i,int j){

        if (IsDigit(Code[j]))//如果当前字符是数字,则再次进入FloatState
        {
            FloatState(i, j + 1);
        }
        if (!IsDigit(Code[j]))
        //如果当前字符是非数字字符,说明Code[i]~Code[j-1]这一段是浮点数
        {
            System.out.print("(012,浮点数,");
            String tempSt="012,";
            printA(i, j, tempSt);
        }
    }

    private static void printA(int i, int j, String tempSt) {//用于输出非单一字符
        for (int k = i; k < j; k++) {
            tempSt = tempSt + Code[k];
            System.out.print(Code[k]);
        }
        System.out.println(")");
        tokens.add(tempSt);
        StartState(j, j);
    }

    private static boolean IsEqual(char ch) {//判断是否是字符'='
        return ch == '=';
    }

    private static boolean IsAdd(char ch)//判断是否是字符'+'
    {
        return ch == '+';
    }

    private static boolean IsSub(char ch)//判断是否是字符'-'
    {
        return ch == '-';
    }

    private static boolean IsMul(char ch)//判断是否是字符'*'
    {
        return ch == '*';
    }

    private static boolean IsDiv(char ch)//判断是否是字符'/'
    {
        return ch == '/';
    }

    private static boolean IsLParent(char ch)//判断是否左括号
    {
        return ch == '(';
    }

    private static boolean IsRParent(char ch)//判断是否是有括号
    {
        return ch == ')';
    }

    private static boolean IsDigit(char ch) {//判断是否是数字
        return Character.isDigit(ch);
    }

    private static boolean IsAlpha(char ch) {//判断是否是字母
        return Character.isLetter(ch);
    }

	private static boolean IsExc(char ch) {
		return ch == '!';
	}

	private static boolean IsLess(char ch) {
		return ch == '<';
	}

	private static boolean IsGreater(char ch) {
		return ch == '>';
	}

	private static boolean IsFH(char ch) {
		return ch == ';';
	}

	private static boolean IsRZKH(char ch) {
		return ch == '}';
	}

	private static boolean IsLZKH(char ch) {
		return ch == '{';
	}
}

5.运行结果

在这里插入图片描述
在这里插入图片描述

源代码下载https://download.youkuaiyun.com/download/Simple__Code/12809398

词法分析器的设计以及java实现(编译原理实验) 词法分析器的设计(编译原理实验)词法分析器java实现:程序运行图: 词法分析器 设计一个词法分析器程序,该程序能完成如下功能:从文本文件中读取字符串,分析器能识别出字符串中单词的是整数还是以英文字母开头的合法标识符,标识符中是否有while、do、if、then、else、begin、end、and、or、not等保留字。若单词是整数则输出整数的编码及数值,是标识符则判定是否为保留字,是保留字则... 阅读详情

相关推荐

编译原理词法分析器 MicroC词法分析器 JAVA实现

题目如下: 实验目的:对循环语句和条件判断语句编写词法分析编译程序,只能通过一遍扫描完成。 实验要求: 关键字: for if then else while do untilintinput output 所有关键字都是小写。 (2)运算符和分隔符: : = + - * / &lt; &g...

qq_39800266的博客 1523

编译原理实验1——词法分析器的Java实现

实验采用Java语言编写,通过多个正则表达式模式进行词法元素匹配,实现了识别保留字、标识符、常数、运算符、界符等功能,并具有一定的错误处理功能。通过对源程序的扫描和分析,词法分析器可以为后续的语法分析和代码生成提供基础支持,为编译器的整个过程打下坚实的基础。成绩以最后一次的验收为准。单词的种别码是语法分析需要的信息,可用整数编码表示,例如:标识符的种别码为1,常数为2,保留字为3,运算符为4,界符为5。单词的自身值是编译其它阶段需要的信息,标识符的自身值是标识符在符号表入口,其他类型单词的自身值是其本身。

ThinkStu的博客 6585

编译原理 词法分析器简单实现 java代码

词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。 完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。 实验目的 通过本实验使学生进一步熟悉和掌握程序设...

qq_36963536的博客 3405

基于Java构造词法分析器+语法分析器完成编译原理实验

功能概述: 根据简单语言的词法和各单词符号种别码表,编写C或C++语言源程序,实现针对该简单语言的词法分析器,然后构造语法分析器。 (1)文件struct.java定义单词符号的二元组结构、全局变量、关键字表的结束标志等。 (2)文件funs.java实现词法扫描算法scanner及其所需的各种基本操作算法。 (3)文件text.java调用scanner算法,实现词法分析器的功能。 所用知识:1.词法分析 2.语法分析 开发环境:Eclipse 2021 jdk1.8 //struct.java 将属性封

lovely__boy的博客 1982

编译原理——Java实现简单的词法分析器

Java实现简单的词法分析器 1.实验目的 掌握词法分析器的功能。 掌握词法分析器的实现。 2.文法介绍 <程序>→PROGRAM <标识符>;<分程序>. <分程序>→<变量说明>BEGIN<语句表>END <变量说明>→VAR<变量表>:<类型>;| <空> <变量表>→<变量表>,<变量> | <变量> <类型>→INT

Madrid-7的博客 2263

Java语言版编译原理实验:实现带符号词法分析器

一个基本的编译器由前端和后端构成。前端主要负责源代码的解析,包括词法分析、语法分析和语义分析,后端则包括中间代码优化和目标代码生成。理解编译器的整体结构对于深入研究其各组成部分至关重要。在很多编程语言中,小数点()是表示浮点数的关键符号。语法上,它位于两个数字之间或位于数字序列的末尾,以表示小数部分的开始。在某些上下文中,单个字符还可能用于表示成员访问操作符,因此需要根据上下文来正确区分其用途。在词法分析的过程中,正负号被视作独立的词法单元。

weixin_36289742的博客 816

编译原理-词法分析器-java实现

编译原理-词法分析器-java实现。对一个简单语言的子集编制一个一遍扫描的词法分析程序。

qq_67366800的博客 957

编译原理课程设计实战:Java实现词法分析与语法分析器

编译原理是计算机科学的核心课程,其中词法分析和语法分析是编译器前端的基础环节。词法分析通过有限自动机将源代码字符流转换为token序列,语法分析则基于文法规则将token流构建为语法树。掌握这两项技术,不仅能深入理解程序语言的解析机制,还能提升代码调试与工程实践能力。在实际应用中,它们广泛用于编译器开发、代码分析工具和领域特定语言实现。本文以北邮课程设计为例,详细讲解如何用Java快速实现可运行的词法分析器和递归下降语法分析器,并分享常见避坑技巧。

weixin_32466193的博客 256

编译原理_实验一 _词法分析 (Java实现及代码解析)

编译原理_实验一 _词法分析 (Java实现及代码解析)

Aleutian的博客 1522

编译原理 词法分析 Java版

编译原理 词法分析 Java版 供课程设计参考

SOI技术实战:从晶圆结构到芯片性能提升的完整解析

本文深入解析SOI(Silicon on Insulator)技术如何通过独特的三明治晶圆结构提升芯片性能,涵盖从220nm SOI层设计到7nm节点的工艺挑战。详细探讨了埋氧层的绝缘优势、性能提升的物理机制,以及AMD处理器和5G射频中的实战应用,为半导体行业提供关键技术洞见。

wdx0123456的博客 962

编译原理词法分析实践:Java实现词法分析器

java实现C语言词法分析器 提前说明: 由于编译原理课程实践的要求,我们需要实现一个高级程序设计语言的词法分析器、语法分析、语义分析,而这次课程实践对实验进行了拆分,第一个阶段是完成词法分析的部分;而我正好开始学java,所以我利用java来完成对C语言的词法分析,此次实验呢,老师要求我们提交可执行的文件(傻瓜式的双击程序即可使用),所以我又对程序进行了可视化窗口(虽然特别low)的设计,如果博友不要这种可视化的设计,我会在后文附带源码供其更改。 特别声明:初学java,代码冗余度高,本人提供源码旨在交流

weixin_43756702的博客 1386

UDS $27服务DLL文件生成

UDS 27算法 DLL文件生成

hkj8808的博客 1284

(编译原理)java实现词法分析器

闲话 最近在学编译原理,需要用语言实现一个词法分析器,其实挺简单的,主要涉及一些语言字符串操作处理,如果会正则表达式的话,感觉实现这个会很简单,但是我并不会啊,然后自己用java实现了,也算是加强了对java的一些字符操作方法的使用。 实现这个分析器,算法上基本上没什么难度,但是其中涉及的一些逻辑上的思考,说白了就是这么多种情况,有写情况还有交叉部分,你怎么让自己不绕进去,并且用代码实现自己的

灰羽 1849

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 712

用人话讲明白线性回归LinearRegression

目录 什么是回归 一元线性回归 损失函数 最小二乘估计 小结 1. 什么是回归 当我们学习一门新课程、接触一个新专业时,总会对该领域的专有名词感到困惑,甚至看完解释仍难以理解其含义。在我们一起学习machine learning的过程中,我会尽量对相关名词用“人话”做一遍解释,以减少学习的“痛苦感”。 譬如今天要学的线性“回归”,这个回归(regression)和我们平时说的“回归祖国”的回...

化简可得 1万+

编译原理学习--词法分析器实现(java)

编译原理学习 一、词法分析器 词法分析过程 将字符流转成符号流。输入:源代码(字符流) 输出:符号流 词法分析过程类似于我们中学语文学习的[词性标注],每个符号是一个元组,应该至少包括一个字符串和一个词性描述。 符号(词法单元) 词法分析器的结果是一个个的符号,英文Token,也叫词法单元 数学上符号是一个元组,例如整数123我们可以表示为(123,Integer) 符号类型 Keyword(关键字) Variable(变量) Operator(操作符) Bracket(括号) Strin

boxrq1的博客 4294

10.28华为OD机试真题 新系统 - 日志规则逆波兰转换 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - 日志规则逆波兰转换 (Java/Py/C/C++/Js/Go)

算法大师! 344

编译原理-词法分析器的实现(头歌java版)

加强对词法分析器的工作原理的理解;提高对词法分析方法的熟练程度;能够使用编程语言编写简单的词法分析程序;能够利用自己编写的分析程序对简单的代码段进行词法分析。本次学习的重点在于深入研究词法分析器的设计,并实现一个功能相对完整的词法分析程序。通过实践学习词法分析器将源代码统一转换为内部表示形式——TOKEN流的过程。实现一个简单的词法分析程序,需要先能够识别并处理基本的单词符号,如标识符、关键字、常量、运算符和界符。

m0_64847413的博客 1363

【GlobalMapper精品教程】038:模拟水位上升(洪水淹没分析)案例教程

基于数字高程模型 ( DEM )格网模型,实现给定水深情况下洪水淹没区的计算模型,讨论洪水淹没演进过程可视化实现的关键技术,以三维可视化方式,动态而形象地模拟在指定洪水水位下的洪水淹没演进过程。

智慧空间实验室 2885

概率的接力:拆解大模型“预测下一个词“的底层逻辑

大模型的智能不在于它拥有了意识,而在于它用纯数学的架构,将人类语言的复杂结构压缩为可计算的向量轨迹与概率接力。当我们不再将其拟人化为"思考者",而是视作高维条件概率引擎时,才能真正驾驭它。预测下一个词,从来不是终点,而是起点。未来的核心竞争力,属于那些能洞察其统计本质、善用其模式生成能力,并以人类理性与事实为锚点的协作者。词元的轨迹终会止步于上下文窗口,但对技术底层的清醒认知,才是跨越幻觉、走向真实智能的基石。

AI浩 333

编译原理实验:小型词法分析器的实现(java版)

一、思路 本质上来说就是词法分析器一个字符串分离的过程。每次读取一行代码将之以字符串的形式进行存储,然后循环遍历该字符串将符合关键字 、标识符、常数、运算符、界符的字符串分别进行存储。最后循环遍历存储集合进行输入。 二、功能 博主实现的该词法分析器可以从一个指定的txt文件读取所有代码并进行词法分析,分析范围如下: 关键字:本词法分析器只能识别java中的53个关键字。 标识符:以字母打头,后接...

慕柏的博客 3243

YOLOv11-Pose部署RK3588实战:人体姿态识别精度翻倍,边缘推理速度突破瓶颈

本教程从YOLOv11-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

m0_64661770的博客 138
下一篇: 编译原理-语法分析器的java实现
夕卜
博客等级 码龄6年 18粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值