语法分析java实现


这个是对应的语法分析器,使用的是递归下降的方法,en算是吧

import java.io.FileNotFoundException;
import java.util.ArrayList;

public class IrParser {
    private static boolean err = false;
    public  static int index = 0;
    public static void main(String[] args) throws FileNotFoundException {

        LexicalAnalyzer lexicalAnalyzer = new LexicalAnalyzer();
        lexicalAnalyzer.main(args);
        ArrayList word = lexicalAnalyzer.getWord();
        for (Object i:
             word) {
            System.out.println("---");
            System.out.println(i);
        }

       begin(index,word);

    }
    public static void move(int index,ArrayList word){
        if(word.get(index) == "1"){     //begin

        }
        if(word.get(index) .equals(10)){     //未知数
            unknown(index,word);
        }
        if(word.get(index) .equals(18)){      //赋值
            assignment(index,word);
        }
        if(word.get(index) .equals(11)){    //数字
            number(index,word);
        }
        if(word.get(index) .equals(26)){    //分号
            semicolon(index,word);
        }
        if(word.get(index) .equals(15)){    //乘法
            multiplication(index,word);
        }
        if(word.get(index) .equals(13)){    //加法
            plus(index,word);
        }
        if(word.get(index) .equals(6)){    //end
            end(index,word);
        }
        if(word.get(index) .equals(0)){    //#
            finish(index,word);
        }

    }
        public static void end(int index,ArrayList word) { //end
            index++;
            move(index,word);
        }

        public static void finish(int index,ArrayList word){  //#
            if (err == false){
                System.out.println("success");
            }else{
                System.out.println("error");
            }
        }
        public static void plus(int index,ArrayList word){   //加法
            if (!((word.get(index-1) .equals(10)|| word.get(index - 1) .equals(28) || word.get(index-1) .equals(11)) && word.get(index+1) .equals(10) ||word.get(index+1) .equals(27) || word.get(index+1) .equals(11)) ){
                err = true;
            }
            index++;
            move(index,word);
        }
    public static void multiplication(int index,ArrayList word){ //乘法
        if (!((word.get(index-1) .equals(10)||word.get(index-1) .equals(28)||word.get(index-1).equals(11))&& (word.get(index +1).equals(11)||word.get(index+1).equals(27)||word.get(index+1) .equals(10)))){
            err = true;
        }
        index++;
        move(index,word);
    }

    public static void semicolon(int index,ArrayList word){   //分号
        index++;
        move(index,word);
    }
    public static void number(int index,ArrayList word){   //数字
        index++;
        move(index,word);
    }

    public static void assignment(int index,ArrayList word){   // 赋值
        if (!(word.get(index-1) .equals(10)&&(word.get(index+1) .equals(11)||word.get(index+1).equals(10)))){
            err = true;
        }
        index++;
        move(index,word);
    }
    public static void unknown(int index,ArrayList word){    //未知数
        index++;
        move(index,word);

    }
    public static void begin(int index,ArrayList word){
        if (word.get(index).equals(1)){
            index++;
            move(index,word);
        }else{
            err = true;
            index++;
            move(index,word);
        }
    }



//    public static void

//    public static boolean err = false;
//    public static void main(String[] args) {
//        LexicalAnalyzer lexicalAnalyzer = new LexicalAnalyzer();
//        ArrayList word = lexicalAnalyzer.getWord();
//        anylyze(word);
//    }
//
//    public static void anylyze(ArrayList word){
//        for (Object item : word) {
//
//
//
//        }
//    }
//
//
//    public static void isbegin(Object begin){
//        if(begin != "begin"){
//            System.out.println("开始应为'begin'");
//            err = true;
//        }else{
//
//        }
//    }
}