X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2Fbind.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fbind%2Fbind.java;h=e384ca418d0976c30020ebf30602e414665cd882;hp=0000000000000000000000000000000000000000;hb=3ba82cd7dde22a9ef2c9c094a51ea5df6bcf687e;hpb=9de26508819cdf8d1104b5f8ccd004a6c4d1c45c diff --git a/src/edu/berkeley/sbp/bind/bind.java b/src/edu/berkeley/sbp/bind/bind.java new file mode 100644 index 0000000..e384ca4 --- /dev/null +++ b/src/edu/berkeley/sbp/bind/bind.java @@ -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 ""; } +}