Advertisement
Aptennap

Elog, Java interpreter

Oct 1st, 2011
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.98 KB | None | 0 0
  1. import java.io.FileReader;
  2. import java.util.LinkedList;
  3. import java.util.Scanner;
  4.  
  5. public class ElogPT {
  6.     public static void main(String[] args) {
  7.         if(args.length == 0) {
  8.             Scanner sc = new Scanner(System.in);
  9.             run(sc.next(), sc.next());
  10.         } else if(args.length == 1) run(readFile(args[0]), "");
  11.         else if(args.length > 1) {
  12.             String f = readFile(args[0]);
  13.             for(int i=1;i<args.length;run(f, args[i++]));
  14.         }
  15.     }
  16.    
  17.     public static void run(String s, String in) {
  18.         int cur = 0, sts = 0;
  19.         LinkedList<Boolean> st = new LinkedList<Boolean>();
  20.         boolean[] ins = new boolean[in.length()];
  21.         int[] vars = new int[256];
  22.         for(int i=0;i<256;vars[i++] = -1);
  23.         for(int i=0;i<in.length();ins[i] = (Character.getNumericValue(in.charAt(i++)))==0?false:true);
  24.         for(char c: s.toCharArray()) {
  25.             if(sts == 0) {
  26.                 if(c == ';') sts = 2;
  27.                 else if(c == ':') sts = 1;
  28.                 else if(c == '.') st.push(st.peek());
  29.                
  30.                 else if(c == '\'') {
  31.                     boolean b = st.pop();
  32.                     st.push(b?false:true);
  33.                 } else if(c == '&') {
  34.                     boolean b1 = st.pop(), b2 = st.pop();
  35.                     st.push(b1 && b2);
  36.                 } else if(c == '|'){
  37.                     boolean b1 = st.pop(), b2 = st.pop();
  38.                     st.push(b1 || b2);
  39.                 } else if(c == '^') {
  40.                     boolean b1 = st.pop(), b2 = st.pop();
  41.                     st.push(b1 ^ b2);
  42.                 }
  43.                
  44.                 else if(c == '0') st.push(false);
  45.                 else if(c == '1') st.push(true);
  46.                 else if(c > 20){
  47.                     if(vars[c] == -1) vars[c] = (ins[cur++]?1:0);
  48.                     if(vars[c] > -1) st.push(vars[c]==1);
  49.                 }
  50.             } else if(sts == 1 && c > 20) {
  51.                 vars[c] = (st.pop()?1:0);
  52.                 sts = 0;
  53.             } else if(c > 20) if(c == '0' || c == '1') System.out.print(c); else System.out.print(vars[c]);
  54.         }
  55.         System.out.println();
  56.     }
  57.    
  58.     public static String readFile(String filename) {
  59.         String result = "";
  60.         try {
  61.             FileReader r = new FileReader(filename);
  62.             int c;
  63.             while((c = r.read()) != -1)
  64.                 result += (char)c;
  65.         } catch(Exception e) {
  66.             System.out.println(e.getMessage());
  67.         }
  68.         return result;
  69.     }
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement