Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class EV
- {
- public static Integer ev (E e, Map <String, Integer> env) { throw new RuntimeException ("oops: " + e); }
- public static Integer ev (V e, Map <String, Integer> env) { return env.get (e.name); }
- public static Integer ev (C e, Map <String, Integer> env) { return e.value; }
- public static Integer ev (P e, Map <String, Integer> env) { return ev (e.a1, env) + ev (e.a2, env); }
- public static Integer ev (T e, Map <String, Integer> env) { return ev (e.a1, env) * ev (e.a2, env); }
- public static void main (String [] a)
- {
- E e = new P (new T (new C (2), new V ("a")), new V ("b"));
- Map <String, Integer> env = new Hashtable <String, Integer> ();
- env.put ("a", 123);
- env.put ("b", 456);
- System.out.println ("ev (e, env) => " + ev (e, env));
- }
- }
- class E {}
- class V extends E
- {
- String name;
- public V (String name) { this.name = name; }
- }
- class C extends E
- {
- Integer value;
- public C (Integer value) { this.value = value; }
- }
- class P extends E
- {
- E a1, a2;
- public P (E a1, E a2) { this.a1 = a1; this.a2 = a2; }
- }
- class T extends E
- {
- E a1, a2;
- public T (E a1, E a2) { this.a1 = a1; this.a2 = a2; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement