Guest User

Untitled

a guest
Oct 19th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.63 KB | None | 0 0
  1. import java.awt.image.IndexColorModel;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.util.Calendar;
  7. import java.util.Scanner;
  8. import java.util.Stack;
  9. import java.util.Vector;
  10.  
  11. import javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction;
  12.  
  13. public class Interpreter {
  14.  
  15. Vector<Variable> var=new Vector<Variable>();
  16. Vector<String[]> store=new Vector<String[]>();
  17. Vector<Vector<String[]>> store_total=new Vector<Vector<String[]>>();
  18. Stack<Vector<String[]>> s_while=new Stack<Vector<String[]>>();
  19.  
  20. // Vector
  21. boolean store_start=false;
  22.  
  23. public static void main(String[] args) {
  24. // TODO Auto-generated method stub
  25. Interpreter interpreter=new Interpreter();
  26. interpreter.run();
  27.  
  28. }
  29. public void run() {
  30.  
  31. System.out.println("Please input something...");
  32. try {
  33. String filePath="E:\\test.txt";
  34. File file=new File(filePath);
  35. if(file.isFile() && file.exists()) {
  36. InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
  37. BufferedReader br = new BufferedReader(isr);
  38. String lineTxt = null;
  39.  
  40. int times=0;
  41.  
  42. while ((lineTxt = br.readLine()) != null) {
  43. System.out.println(lineTxt);
  44. String line=lineTxt.replace(";", " ");
  45. line=line.trim(); //delete space in the front of the line
  46. String[] word=line.split("\\s+"); //\s means space(+ one or more space)
  47.  
  48.  
  49.  
  50. if(word[0].equals("while"))
  51. {
  52. findwhile(word);
  53. store_start=true;
  54. continue;
  55. }
  56.  
  57.  
  58. if(word[0].equals("end"))
  59. {
  60.  
  61. Vector<String[]> store=s_while.peek();
  62. System.out.println("*****the top of stack*****");
  63. for(int i=0;i<store.size();i++) //print one part of while
  64. {
  65. for(String ss:store.get(i))
  66. {
  67.  
  68. System.out.print(ss);
  69. }
  70. System.out.println();
  71.  
  72. }
  73.  
  74. s_while.pop();
  75. if(s_while.empty())
  76. {
  77. store_start=false;
  78.  
  79. operate(0);
  80.  
  81.  
  82. }
  83.  
  84.  
  85. }
  86.  
  87. if(store_start==true&&!word[0].equals("end"))
  88. {
  89.  
  90. Vector<String[]> store=s_while.peek();
  91. store.addElement(word);
  92.  
  93. }
  94.  
  95. if(store_start==false)
  96. {
  97. if(word[0].equals("clear"))
  98. {
  99. //X System.out.println(word[1]);
  100. clear(word[1]);
  101. System.out.println(getX(word[1]));
  102. }
  103. if(word[0].equals("incr"))
  104. {
  105. Incr(word[1]);
  106. System.out.println(getX(word[1]));
  107. }
  108. if(word[0].equals("decr"))
  109. {
  110. System.out.println(store_start);
  111. decr(word[1]);
  112. System.out.println(getX(word[1]));
  113. }
  114. }
  115.  
  116. for(int i=0;i<var.size();i++)
  117. {
  118. Variable x=var.get(i);
  119. System.out.println(x.getname()+": "+x.getvalue());
  120. }
  121.  
  122.  
  123. }
  124. br.close();
  125. } else {
  126. System.out.println("file doesn't exist.");
  127. }
  128.  
  129. }catch (Exception e) {
  130. // TODO: handle exception
  131. System.out.println("can't read.");
  132. }
  133.  
  134. }
  135.  
  136.  
  137.  
  138. public void findwhile(String[] word)
  139. {
  140. if(s_while.empty())
  141. {
  142. Vector<String[]> store=new Vector<String[]>();
  143. store.addElement(word);
  144. // store.addElement(word);
  145. s_while.push(store);
  146. store_total.addElement(store); //start store syntax from while
  147. }
  148. else
  149. {
  150. s_while.peek().addElement(word);
  151. Vector<String[]> store=new Vector<String[]>();
  152. store.addElement(word);
  153. s_while.push(store);
  154. store_total.addElement(store);
  155. }
  156.  
  157.  
  158.  
  159. }
  160.  
  161.  
  162. public void operate(int x) { //run the syntax in the evey while (and run ? times)
  163. // TODO Auto-generated method stub
  164. Vector<String[]> vs=store_total.get(x); //in order
  165. for(int i=0;i<store_total.size();i++)
  166. {
  167. System.out.println("store_total 储存顺序");
  168. System.out.println(store_total.get(i).get(0)[1]);
  169. //print store_total
  170. }
  171.  
  172.  
  173. String cc=vs.get(0)[1];
  174. int w_time=match(vs.get(0)[1]).getvalue();
  175.  
  176. System.out.println("debug"+w_time+" "+cc);
  177.  
  178. for(int j=0;j<w_time;j++)
  179. {
  180. for(int i=1;i<vs.size();i++)
  181. {
  182.  
  183. if(vs.get(i)[0].equals("clear"))
  184. {
  185. clear(vs.get(i)[1]);
  186. System.out.println(getX(vs.get(i)[1]));
  187. }
  188. if(vs.get(i)[0].equals("incr"))
  189. {
  190. Incr(vs.get(i)[1]);
  191. System.out.println(getX(vs.get(i)[1]));
  192. }
  193. if(vs.get(i)[0].equals("decr"))
  194. {
  195. decr(vs.get(i)[1]);
  196. System.out.println(getX(vs.get(i)[1]));
  197. }
  198. if(vs.get(i)[0].equals("while"))
  199. {
  200. System.out.println("while");
  201. for(int i1=1;i1<store_total.size();i1++)
  202. {
  203. operate(i1);
  204. }
  205.  
  206. }
  207. }
  208.  
  209. }
  210. for(int i=0;i<var.size();i++)
  211. {
  212. Variable x1=var.get(i);
  213. System.out.println(x1.getname()+": "+x1.getvalue());
  214. }
  215. }
  216. public int while_o(String s_ver) {
  217. // TODO Auto-generated method stub
  218.  
  219. return getX(s_ver);
  220.  
  221. }
  222. /* public void while_o(String s_ver1, String s_ver3) {
  223. // TODO Auto-generated method stub
  224. int num=Integer.parseInt(s_ver3);
  225. int x=getX();
  226. while(x<num)
  227. {
  228.  
  229. }
  230. }*/
  231. public void decr(String s_ver) {
  232. // TODO Auto-generated method stub
  233. Variable var=match(s_ver);
  234. int x=var.getvalue()-1;
  235. var.setvalue(x);
  236.  
  237. }
  238. public void Incr(String s_ver) {
  239. // TODO Auto-generated method stub
  240. Variable var=match(s_ver);
  241. int x=var.getvalue()+1;
  242. var.setvalue(x);
  243.  
  244.  
  245. }
  246. public void clear(String s_ver) {
  247. // TODO Auto-generated method stub
  248. setX(s_ver,0);
  249.  
  250. }
  251. public void setX(String s_ver,int x) //set a value
  252. {
  253. Variable var=match(s_ver);
  254. var.setvalue(x);
  255. }
  256. public int getX(String s_ver)
  257. {
  258. Variable var=match(s_ver);
  259. return var.getvalue();
  260. }
  261.  
  262.  
  263. public Variable match(String s_ver)
  264. {
  265. for(int i=0;i<var.size();i++)
  266. {
  267. if(var.get(i).getname().equals(s_ver))
  268. {
  269. return var.get(i);
  270. }
  271.  
  272.  
  273. }
  274. System.out.println("creat a new variable "+s_ver);
  275. Variable X=new Variable(s_ver);
  276. var.addElement(X);
  277. return X;
  278.  
  279.  
  280. }
  281.  
  282.  
  283. }
Add Comment
Please, Sign In to add comment