Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.image.IndexColorModel;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStreamReader;
- import java.util.Calendar;
- import java.util.Scanner;
- import java.util.Stack;
- import java.util.Vector;
- import javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction;
- public class Interpreter {
- Vector<Variable> var=new Vector<Variable>();
- Vector<String[]> store=new Vector<String[]>();
- Vector<Vector<String[]>> store_total=new Vector<Vector<String[]>>();
- Stack<Vector<String[]>> s_while=new Stack<Vector<String[]>>();
- // Vector
- boolean store_start=false;
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Interpreter interpreter=new Interpreter();
- interpreter.run();
- }
- public void run() {
- System.out.println("Please input something...");
- try {
- String filePath="E:\\test.txt";
- File file=new File(filePath);
- if(file.isFile() && file.exists()) {
- InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
- BufferedReader br = new BufferedReader(isr);
- String lineTxt = null;
- int times=0;
- while ((lineTxt = br.readLine()) != null) {
- System.out.println(lineTxt);
- String line=lineTxt.replace(";", " ");
- line=line.trim(); //delete space in the front of the line
- String[] word=line.split("\\s+"); //\s means space(+ one or more space)
- if(word[0].equals("while"))
- {
- findwhile(word);
- store_start=true;
- continue;
- }
- if(word[0].equals("end"))
- {
- Vector<String[]> store=s_while.peek();
- System.out.println("*****the top of stack*****");
- for(int i=0;i<store.size();i++) //print one part of while
- {
- for(String ss:store.get(i))
- {
- System.out.print(ss);
- }
- System.out.println();
- }
- s_while.pop();
- if(s_while.empty())
- {
- store_start=false;
- operate(0);
- }
- }
- if(store_start==true&&!word[0].equals("end"))
- {
- Vector<String[]> store=s_while.peek();
- store.addElement(word);
- }
- if(store_start==false)
- {
- if(word[0].equals("clear"))
- {
- //X System.out.println(word[1]);
- clear(word[1]);
- System.out.println(getX(word[1]));
- }
- if(word[0].equals("incr"))
- {
- Incr(word[1]);
- System.out.println(getX(word[1]));
- }
- if(word[0].equals("decr"))
- {
- System.out.println(store_start);
- decr(word[1]);
- System.out.println(getX(word[1]));
- }
- }
- for(int i=0;i<var.size();i++)
- {
- Variable x=var.get(i);
- System.out.println(x.getname()+": "+x.getvalue());
- }
- }
- br.close();
- } else {
- System.out.println("file doesn't exist.");
- }
- }catch (Exception e) {
- // TODO: handle exception
- System.out.println("can't read.");
- }
- }
- public void findwhile(String[] word)
- {
- if(s_while.empty())
- {
- Vector<String[]> store=new Vector<String[]>();
- store.addElement(word);
- // store.addElement(word);
- s_while.push(store);
- store_total.addElement(store); //start store syntax from while
- }
- else
- {
- s_while.peek().addElement(word);
- Vector<String[]> store=new Vector<String[]>();
- store.addElement(word);
- s_while.push(store);
- store_total.addElement(store);
- }
- }
- public void operate(int x) { //run the syntax in the evey while (and run ? times)
- // TODO Auto-generated method stub
- Vector<String[]> vs=store_total.get(x); //in order
- for(int i=0;i<store_total.size();i++)
- {
- System.out.println("store_total 储存顺序");
- System.out.println(store_total.get(i).get(0)[1]);
- //print store_total
- }
- String cc=vs.get(0)[1];
- int w_time=match(vs.get(0)[1]).getvalue();
- System.out.println("debug"+w_time+" "+cc);
- for(int j=0;j<w_time;j++)
- {
- for(int i=1;i<vs.size();i++)
- {
- if(vs.get(i)[0].equals("clear"))
- {
- clear(vs.get(i)[1]);
- System.out.println(getX(vs.get(i)[1]));
- }
- if(vs.get(i)[0].equals("incr"))
- {
- Incr(vs.get(i)[1]);
- System.out.println(getX(vs.get(i)[1]));
- }
- if(vs.get(i)[0].equals("decr"))
- {
- decr(vs.get(i)[1]);
- System.out.println(getX(vs.get(i)[1]));
- }
- if(vs.get(i)[0].equals("while"))
- {
- System.out.println("while");
- for(int i1=1;i1<store_total.size();i1++)
- {
- operate(i1);
- }
- }
- }
- }
- for(int i=0;i<var.size();i++)
- {
- Variable x1=var.get(i);
- System.out.println(x1.getname()+": "+x1.getvalue());
- }
- }
- public int while_o(String s_ver) {
- // TODO Auto-generated method stub
- return getX(s_ver);
- }
- /* public void while_o(String s_ver1, String s_ver3) {
- // TODO Auto-generated method stub
- int num=Integer.parseInt(s_ver3);
- int x=getX();
- while(x<num)
- {
- }
- }*/
- public void decr(String s_ver) {
- // TODO Auto-generated method stub
- Variable var=match(s_ver);
- int x=var.getvalue()-1;
- var.setvalue(x);
- }
- public void Incr(String s_ver) {
- // TODO Auto-generated method stub
- Variable var=match(s_ver);
- int x=var.getvalue()+1;
- var.setvalue(x);
- }
- public void clear(String s_ver) {
- // TODO Auto-generated method stub
- setX(s_ver,0);
- }
- public void setX(String s_ver,int x) //set a value
- {
- Variable var=match(s_ver);
- var.setvalue(x);
- }
- public int getX(String s_ver)
- {
- Variable var=match(s_ver);
- return var.getvalue();
- }
- public Variable match(String s_ver)
- {
- for(int i=0;i<var.size();i++)
- {
- if(var.get(i).getname().equals(s_ver))
- {
- return var.get(i);
- }
- }
- System.out.println("creat a new variable "+s_ver);
- Variable X=new Variable(s_ver);
- var.addElement(X);
- return X;
- }
- }
Add Comment
Please, Sign In to add comment