编译原理-简单模拟编译器判错
来源:互联网 发布:禁欲三个月的好处 知乎 编辑:程序博客网 时间:2024/06/10 00:12
本程序只是简单的模拟一下编译器的运行情况,并不是一个真正的编译器,只是为了编译原理便于理解。请勿对号入座。
package com.dzy.reflction;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class CheckString { /** * @作者:宇智波佐助 * @param :没有参数 */ public static void main(String[] args) { // TODO Auto-generated method stub checkLeixing(); } public static void checkLeixing() { String youInput=null; String[] splitString=null; String[] splitLeixing=null; try { InputStreamReader is=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(is); while ((youInput=br.readLine())!="") { //已经获取到 splitString=youInput.split("="); /* for (int i = 0; i < splitString.length; i++) { if(isNumber(splitString[i])) { } }*/ splitLeixing=splitString[0].split(" "); // for (int i = 0; i < splitLeixing.length; i++) { //System.out.println("=前面已经被分割成了"+splitLeixing[i]); if (splitLeixing[i].equals("const")) { if (isNumber(splitString[1])) { System.out.println(splitLeixing[1]+"("+"Integer"+" , "+splitString[1]+")"); break; }else { System.out.println("右边不是一个常量");break; } }//const if (splitLeixing[i].equals("integer")) { if (isNumber(splitString[1])) { System.out.println(splitLeixing[1]+"("+"integer"+" , "+splitString[1]+")"); break; }else { System.out.println("右边不是一个int型");break; } }//int if (splitLeixing[i].equals("float")) { if (isDecimal(splitString[1])) { System.out.println(splitLeixing[1]+"("+"float"+" , "+splitString[1]+")"); break; }else { System.out.println("右边不是一个float型");break; } }//float if (splitLeixing[i].equals("String")) { if(!isNumber(splitString[1])) { System.out.println(splitLeixing[1]+"("+"String"+" , "+splitString[1]+")"); break; }else { System.out.println("右边不是一个String型");break; } }else{ System.out.println("不是常用类型"); } } } }catch (Exception e) { e.printStackTrace(); } } public static boolean isNumber(String str){ Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); if( !isNum.matches() ){ return false; } return true; } public static boolean isDecimal(String str){ return Pattern.compile("([1-9]+[0-9]*|0)(\\.[\\d]+)?").matcher(str).matches(); }}
0 0
- 编译原理-简单模拟编译器判错
- 编译原理第二章简单的一遍编译器
- 编译原理课设之简单编译器实现
- 小白说编译原理-9-最简单minus-c语言编译器
- 编译原理Pl/0语言 简单编译器思路
- 编译原理课设之简单编译器实现
- 编译器编译原理详解
- 编译器编译原理详解
- 【编译器、编译原理相关】
- TINY编译器《编译原理》
- 编译器编译原理详解
- 编译器编译原理详细解析
- 编译器编译原理详细解析
- 《编译原理》模拟试题
- 简单学习一下编译器原理
- 【编译原理】编译器的编译基本过程
- 编译器 工作原理及 编译过程
- 深入浅出编译原理-2-gcc编译器概览
- delegate failed to return after waiting 10 seconds:自定义UIWebView缓冲加载数据失败崩溃
- 18.allegro区域约束规则设置
- ORA-12518 TNS:监听程序无法分发客户机连接 解决办法
- 计算几何:非规范相交的模板
- (1.4.5)字符串类
- 编译原理-简单模拟编译器判错
- Unity3d中的特殊文件夹
- Spring MVC PDF视图
- HDOJ 1020 Encoding
- 不可小瞧的GetHashCode函数
- 物联网工程RFID第一次作业(第三周)
- BeanUtils.copyProperties()与PropertyUtils.copyProperties()的用法
- 系统架构技能之设计模式-单件模式
- MySQL基础,性能优化和架构笔记