checkpoint
[sbp.git] / src / edu / berkeley / sbp / bind / bind.java
diff --git a/src/edu/berkeley/sbp/bind/bind.java b/src/edu/berkeley/sbp/bind/bind.java
new file mode 100644 (file)
index 0000000..e384ca4
--- /dev/null
@@ -0,0 +1,56 @@
+package edu.berkeley.sbp.bind;
+
+import edu.berkeley.sbp.util.*;
+import edu.berkeley.sbp.*;
+import edu.berkeley.sbp.chr.*;
+import edu.berkeley.sbp.bind.*;
+import java.util.*;
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.io.*;
+
+public class bind {    
+    /**
+     *  Constructors, classes, and methods with this attribute will
+     *  match every production of the nonterminal called "value()"
+     *  that is arg-compatible.  If value() is undefined, then the
+     *  class/constructor/method name is used.
+     */ 
+    /*
+      @Retention(RetentionPolicy.RUNTIME) public static @interface nonterminal { String value() default ""; }
+    */
+
+    @Retention(RetentionPolicy.RUNTIME) public static @interface raw { }
+
+    /**
+     *  Constructors, classes, and methods with this attribute will
+     *  match every tree tagged with "value()" that is arg-compatible.
+     *  If value() is undefined, then the class/constructor/method
+     *  name is used.
+     */ 
+
+    @Retention(RetentionPolicy.RUNTIME) public static @interface as         { String value() default ""; }
+
+
+    /**
+     *  If any parameter to a method or field in a class has a named
+     *  arg-tag, that parameter/field matches the child of the tree
+     *  which either has that label or else is a reference to a
+     *  nonterminal with the corresponding name.
+     *  
+     *  The remaining non-named arg-tags match the remaining children
+     *  of the tree in sequential order.
+     *
+     *  If any arg-tagged parameters/fields remain, the match fails.
+     *  If there were no arg-tagged parameters-fields, it is as if all
+     *  of them were non-named and arg-tagged.
+     *
+     *  A method/constructor is arg-compatible if all of its arguments
+     *  are arg-compatible.
+     *
+     *  A class is arg-compatible if all of its fields are
+     *  arg-compatible, or if one of its constructors is arg-compatible.
+     *
+     */
+    @Retention(RetentionPolicy.RUNTIME) public static @interface arg         { String value() default ""; }
+}