/** * 13.1: The Form of a Binary */ module dryad/jls/binary/Form strategies /** * Parses the binary name of a class file to a list of parts the describe the meaning of the name. * * @type List(String) -> List(BinaryNamePart(String)) */ parse-binary-name = is-string ; explode-string ; parse-binary-name ; map(try(id#([implode-string]))) /** * Parses the binary name of a class file to a list of parts the describe the meaning of the name. * * @type List(Char) -> List(BinaryNamePart(List(Char))) */ parse-binary-name = list-tokenize(?'$') ; let digit-plus(c) = [is-digit | id]; ?[_ | <digit-star(c)>] digit-star(c) = [is-digit | id] < ?[_ | <digit-star(c)>] + c /** * @todo Should check this, but is not really necessary. */ toplevel = !TopLevel(<id>) member = [is-alpha | id] ; !Member(<id>) local-or-anonymous = digit-plus(id) ; if ?[] then !Anonymous() else !Local(<id>) end in [toplevel | map(member <+ local-or-anonymous)] end is-digit = ?'0' + ?'1' + ?'2' + ?'3' + ?'4' + ?'5' + ?'6' + ?'7' + ?'8' + ?'9' signature constructors TopLevel : a -> BinaryNamePart(a) Member : a -> BinaryNamePart(a) /** * @todo Include the number? */ Anonymous : BinaryNamePart(a) /** * @todo Include the number? */ Local : a -> BinaryNamePart(a)