ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【编译原理】TEST递归下降演示

2019-10-28 16:04:31  阅读:199  来源: 互联网

标签:return String 递归 static RRule key TEST 演示 public


MyUtil.java

package Util;

import Value_Final.RRule;

public class MyUtil {
    /**
     * 判断字符串是否是关键字
     * @param key 要判断的字符串
     * @return 是否找到
     * */
    public static boolean isKeyValue(String key){
        for(int i=0;i< RRule.KEY_VALUE.length;i++){
            if(key.equals(RRule.KEY_VALUE[i])){
                return true;
            }
        }
        return false;
    }
    /**
     * 判断字符串是否是双分界符
     * @param key 要判断的字符串
     * @return 是否找到
     * */
    public static boolean isDoubleDivider(String key){
        for(int i=0;i< RRule.DOUBLE_DIVIDER.length;i++){
            if(key.equals(RRule.DOUBLE_DIVIDER[i])){
                return true;
            }
        }
        return false;
    }
    /**
     * 判断字符串是否是单分界符
     * @param key 要判断的字符串
     * @return 是否找到
     * */
    public static boolean isSignalDivider(String key){
        for(int i=0;i< RRule.SIGNAL_DIVIDER.length;i++){
            if(key.equals(RRule.SIGNAL_DIVIDER[i])){
                return true;
            }
        }
        return false;
    }
    /**
     * 判断字符串是否是字母还是数字
     * @param key
     * @return 1 是字母 0 是数字 -1 异常
     * */
    public static int isWordsOrNumber(char key){
        int number=(int)key;
        if((number>='A'&&number<='Z')||(number>='a'&&number<='z')){
            return 1;
        }else if(number>='0'&&number<='9'){
            return 0;
        }else {
            return -1;
        }
    }
    /**
     * 判断字符串是否是数字
     * @param ss
     * @return
     * */
    public static Boolean isNumber(String ss){
        for(int i=0;i<ss.length();i++){
            if(isWordsOrNumber(ss.charAt(i))!=0){
                return false;
            }
        }
        return true;
    }
}

RRule.java

package Value_Final;

/**
 * 一些常用变量规则
 * */
public class RRule {
    //关键字 规则
    public static final String[] KEY_VALUE={"abstract","assert","boolean","break","byte","case","catch","char",
            "class","const","continue","default","do","double","else","enum","extends","final","finally",
            "float","for","goto","if","implements","import","instanceof","int","interface","long","native",
            "long","native","new","package","private","protected","public","return","short","static","super",
            "switch","this","throw","throws","try","void","while"};

    public static final String[] SIGNAL_DIVIDER={"=","+","-","*","(",")","{","}",";",":",","};
    public static final String[] DOUBLE_DIVIDER={"==",">=","<=","!="};

}

Analysis,java

import Util.MyUtil;

import java.util.Scanner;

public class Analysis {
    public static void main(String[] args) {
        String inputCode=getInputString();
        String spiltItem[]=inputCode.split(" ");
        for(String item:spiltItem){
            if (MyUtil.isKeyValue(item)){
                System.out.println(item);//输出关键字
            }else if(MyUtil.isSignalDivider(item)){
                System.out.println(item);
            }else {//不是关键字则有可能是好几种情况

                if(item.contains(";")){//解析a+b=c;
                    String addstring="";
                    for(int i=0;i<item.length();i++){
                        if(MyUtil.isSignalDivider(item.charAt(i)+"")){//如果是单分隔符
                            System.out.println(item.charAt(i));
                            addstring="";
                            continue;
                        }
                        addstring=addstring+item.charAt(i);
                        if(MyUtil.isDoubleDivider(addstring)){//判断是不是双分隔符
                            System.out.println(item.charAt(i));
                            addstring="";
                            continue;
                        }
                        if(item.charAt(i+1)==';'){
                            if(MyUtil.isNumber(addstring)){
                                System.out.println("数字:"+addstring);
                            }else {
                                System.out.println("变量:"+addstring);
                            }

                            System.out.println(";");
                        }
                    }
                }


            }
        }

    }

    public static String getInputString() {
        System.out.println("请输入一段代码,并以最后一行为end结束");
        Scanner scanner = new Scanner(System.in);
        String firstLine = scanner.nextLine();
        StringBuffer ss = new StringBuffer(firstLine+" ");
        while (!firstLine.equals("end")) {
            firstLine = scanner.nextLine();
            ss.append(firstLine+" ");
        }
        scanner.close();
        System.out.println("读取的是"+ss.toString());
        return ss.toString().replace("end", "");

    }
}

 

标签:return,String,递归,static,RRule,key,TEST,演示,public
来源: https://www.cnblogs.com/robotpaul/p/11752818.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有