Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- String path;
- System.out.println("Введiть назву вхiдного файлу: ");
- try{
- textLen=System.in.read(readline);
- String codepath = new String (readline,0,textLen, "ISO-8859-1");
- LexPascal lex = new LexPascal(codepath);
- ArrayList<Map<Tokens , String>> tokens = lex.Tokenize();
- boolean accepted = true;
- Stack<Integer> st = new Stack<>();
- st.push(testLang.getAxioma());
- int[][] table = testLang.getUprTable();
- for(int kk = 0 ; kk < tokens.size() ; ++kk , kk = Math.max(kk , 0)){
- Map<Tokens , String> mp = tokens.get(kk);
- boolean skip = false;
- for(Tokens tk : mp.keySet()){
- if(tk == Tokens.Comment){
- skip = true;
- }
- }
- if(skip) {
- continue;
- }
- if(st.isEmpty()){
- System.out.println("Error, stack is empty! ");
- accepted = false;
- break;
- }
- int top = st.peek();
- if(top < 0){//top is non terminal
- int cur = -1;
- int nt[] = testLang.getNonTerminals();
- for(int i = 0 ; i < nt.length ; ++i){
- if(top == nt[i]){
- cur = i;
- break;
- }
- }
- //check that cur != -1
- int el = -1;
- int tr[] = testLang.getTerminals();
- for(int i = 0 ; i < tr.length ; ++i){
- String terminal = testLang.getLexemaText(tr[i]);
- for(Tokens tk : mp.keySet()){
- if(terminal.equals(mp.get(tk)) || terminal.equals(tk.toString())){
- el = i;
- break;
- }
- }
- }
- if(cur < 0 || el < 0){
- System.out.println("Error, no such lexema found in the grammar!");
- }
- int next = table[cur][el];
- LinkedList<Node> lang = testLang.getLanguarge();
- int rule[] = lang.get(Math.max(next - 1 , 0)).getRoole();
- st.pop();
- for(int i = rule.length - 1; i >= 1 ; --i) {
- st.push(rule[i]);
- }
- --kk;
- }else{//top is terminal
- String terminal = testLang.getLexemaText(top);
- boolean eq = false;
- for(Tokens tk : mp.keySet()){
- if(terminal.equals(mp.get(tk)) || terminal.equals(tk.toString())){
- eq = true;
- }
- }
- if(eq){
- st.pop();
- continue;
- }else{
- System.out.println("Error: " + mp + " found, expected: " + terminal);
- accepted = false;
- break;
- }
- }
- }
- if(!st.isEmpty() && accepted){
- accepted = false;
- System.out.println("Error, analyzer have reached end of the code, but stack is not empty!");
- }
- if(accepted == true) {
- System.out.print("OK\n");
- // System.out.println(st);
- }
- }catch (java.io.IOException e ){}
- catch (java.lang.Exception e){e.printStackTrace();}
- break;
Advertisement
Add Comment
Please, Sign In to add comment