具体实现程序:

import java.util.Scanner;public class Analyze_terms {
private String keyWord[] = {"for","if","then","else","while","do"};
private char ch;
//判断是否是关键字
boolean isKey(String str)
{for(int i = 0;i < keyWord.length;i++){if(keyWord[i].equals(str))return true;}return false;
}
//判断是否是字母
boolean isLetter(char letter)
{if((letter >= 'a' && letter <= 'z')||(letter >= 'A' && letter <= 'Z'))return true;elsereturn false;
}
//判断是否是数字
boolean isDigit(char digit)
{if(digit >= '0' && digit <= '9')return true;elsereturn false;
}
//分析方法
void analyze(char[] chars)
{String arr = "";for(int i = 0;i< chars.length;i++) {ch = chars[i];arr = "";           //每次都重置这个字符串,用来接收所得到的语句if(ch == ' '||ch == '\t'||ch == '\n'||ch == '\r'){}//除空格之内的else if(isLetter(ch)){while(isLetter(ch)||isDigit(ch)){    arr += ch;ch = chars[++i];}//回退一个字符i--;if(isKey(arr)){//关键字if( arr.equals(keyWord[1])){System.out.println("("+arr+","+"2"+")");}else if(arr.equals(keyWord[2]))System.out.println("("+arr+","+"3"+")");else if(arr.equals(keyWord[3])){System.out.println("("+arr+","+"4"+")");}else if(arr.equals(keyWord[5])){System.out.println("("+arr+","+"6"+")");}else if(arr.equals(keyWord[0])){System.out.println("("+arr+","+"1"+")");}}else{//标识符System.out.println("("+arr+","+"10"+")");}}else if(isDigit(ch)||(ch == '.')){while(isDigit(ch)||(ch == '.'&&isDigit(chars[++i]))){if(ch == '.') i--;arr = arr + ch;ch = chars[++i];    //主要原因:把数字后的字符当做判断是否为多位数的条件,导致数字后的字符都没有了。if(!(isDigit(ch)||ch == '.')) {i--;}}//无符号常数System.out.println("("+arr+","+"11"+")");}                else switch(ch){//运算符case '+':System.out.println("("+ch+","+"13"+")");break;case '-':System.out.println("("+ch+","+"14"+")");break;case '*':System.out.println("("+ch+","+"15"+")");break;case '/':System.out.println("("+ch+","+"16"+")");break;//分界符case '(':System.out.println("("+ch+","+"27"+")");break;case ')':System.out.println("("+ch+","+"28"+")");break;case ';':System.out.println("("+ch+","+"26"+")");break;//运算符case '=':{ch = chars[++i];if(ch == '=')System.out.println("("+"=="+","+"25"+")");else {System.out.println("("+"="+","+"18"+")");i--;}}break;case ':':{ch = chars[++i];System.out.println("("+":"+","+"17"+")");i--;}break;case '>':{ch = chars[++i];if(ch == '=')System.out.println("("+">="+","+"24"+")");else {System.out.println("("+">"+","+"21"+")");i--;}}break;case '<':{ch = chars[++i];if(ch == '=')System.out.println("("+"<="+","+"22"+")");else if(ch == '>')System.out.println("("+"<>"+","+"23"+")");else {System.out.println("("+"<"+","+"20"+")");i--;}}break;//无识别default: System.out.println("("+ch+","+"0"+")");}}
}public static void main(String[] args) throws Exception {System.out.println("请输入语句(以#结束):");Scanner sc = new Scanner(System.in);sc.useDelimiter("#");String str = sc.next();char [] term = str.toCharArray();new Analyze_terms().analyze(term);sc.close();}
}

输入:

结果:

java实验2词法分析程序设计相关推荐

  1. c语言词法分析程序实验报告,实验一词法分析程序设计与实现

    实验一 词法分析程序设计与实现 一.实验目的: 加深对词法分析器的工作过程的理解:加强对词法分析方法的掌握:能够采用一种编程语言实现简单的词法分析程序:能够使用自己编写的分析程序对简单的程序段进行词法 ...

  2. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  3. JAVA实验二 面向对象程序设计

    一.实验目的 通过编程和上机实验,掌握类和构造方法的定义及创建对象的方法,掌握类的封装及继承原则,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包.接口的使用方法,掌握面向对象的程序设计方法. 二. ...

  4. 实验一 词法分析程序设计与实现 (Java实现)

    一. 实验目的 设计.编制并调试一个词法分析程序,加深对词法分析原理的理解. 二. 实验内容 2.1 待分析的简单词法 (1)关键字: begin if then while do end 所有关键字 ...

  5. #20165323 Java实验四 Android程序设计

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:13:45 - 15:25 实验序号:实验 ...

  6. 编译原理实验一 词法分析程序设计与实现

    一.实验目的 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符流形式的源程序转化为一个由各类单词构成的序列的词法分析方法. 二.基本实验内容与要求 假定一种高级程序 ...

  7. java实验四用户程序设计_20145329《Java程序设计》实验四总结

    实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 1.搭建Android环境 2.安装Android,核心是配置JDK. ...

  8. 实验1 词法分析程序设计

    [开发语言及实现平台或实验环境] C++/Clion [实验目的] (1)理解词法分析在编译程序中的作用 (2)加深对有穷自动机模型的理解 (3)掌握词法分析程序的实现方法和技术 [实验内容] 对一个 ...

  9. 实验一 词法分析程序设计_重庆新增一生物2级安全实验室,将着眼新冠病毒等药物检测分析...

    5月12日,上游新闻·重庆商报记者获悉,位于两江新区的迪纳利医药科技有限责任公司(下简称"迪纳利")将建立生物2级安全实验室(简称"BSL-2"),该实验室主要 ...

最新文章

  1. 双调TSP问题通俗讲解
  2. 6、linux网络编程--UDP协议编程
  3. java发送加密报文_RSA加密---从后台到客户端实现报文加解密
  4. 双目视觉焦距_双目视觉简介
  5. 常见的web应用服务器
  6. jq js json 转字符串_JS中JSON对象和String之间的互转及处理技巧
  7. 实现Windows和Linux之间的文件共享
  8. Lintcode: O(1) Check Power of 2
  9. formdata多文件上传_如何使用FormData轻松上传单个或多个文件
  10. 从零开始webpack搭建项目
  11. CMMI3认证和CMMI5认证有哪些不同
  12. 企业手机装配线平衡改善研究
  13. 【生信技能树】GEO数据库挖掘 P6 5了解矩阵
  14. 诺基亚智能手机内存不足等问题的解决
  15. Fabric 版本问题
  16. MacOS系统下 adb 调试电视相关(homebrew安装 adb)
  17. 5.3 matlab数据插值(线性插值、最近点插值、埃尔米特插值、三次样条插值)
  18. 面试官100%会问的接口测试的知识
  19. Zhong__xlrd基本使用
  20. Java与模式之建造者模式详解

热门文章

  1. java echo程序,java网络编程 echo
  2. 安全测试之XSS攻击
  3. POJ-3687-Labeling Balls
  4. [投稿]通过Web界面在多台服务器上批量创建文件
  5. react-redux的Provider和connect
  6. JAVA入门[4]-IntelliJ IDEA配置Tomcat
  7. 计算机程序的思维逻辑 (63) - 实用序列化: JSON/XML/MessagePack
  8. hibernate中validate的使用(转)
  9. 关于站在主管的角度来看企业用人的一些规则
  10. 抽象工廠與工廠方法的區別