编译原理-简单模拟编译器判错

来源:互联网 发布:禁欲三个月的好处 知乎 编辑:程序博客网 时间: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
原创粉丝点击