From roberhau@cup.hp.com Wed Dec 31 16:47:04 1997 Received: from palrel3.hp.com (palrel3.hp.com [156.153.255.226]) by amber.ccs.neu.edu (8.8.6/8.8.6) with ESMTP id QAA11602 for ; Wed, 31 Dec 1997 16:47:02 -0500 (EST) Received: from xsvr3.cup.hp.com (roberhau@xsvr3.cup.hp.com [15.0.65.10]) by palrel3.hp.com (8.8.5/8.8.5tis) with ESMTP id NAA03625 for ; Wed, 31 Dec 1997 13:47:01 -0800 (PST) Received: (from roberhau@localhost) by xsvr3.cup.hp.com (8.8.6/8.7.3 TIS Messaging 5.0) id NAA18574; Wed, 31 Dec 1997 13:46:58 -0800 (PST) From: "Roy Oberhauser" Message-Id: <9712311346.ZM18572@xsvr3.cup.hp.com> Date: Wed, 31 Dec 1997 13:46:58 -0800 X-Mailer: Z-Mail (3.2.1 10oct95) To: lieber@ccs.neu.edu Subject: Project Completion Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Status: R Hi Karl, I believe the project is completed. Thanks for your patience. A sample of the output run on the program itself (demjava + my enhancements) can be viewed (at least temporarily before they nix my account) at: http://www.ccs.neu.edu/home/roberhau/3h/ I'll be starting to prepare for the final. Happy New Year! Roy Below is the README-project: ======================================================================= Your name: Roy Oberhauser Your host: N/A Account Number: roberhau Project: Takes an adaptive program and converts it into a set of HTML documents to assist with browsing and understanding the program. Directory: /proj/demsys/com3360/f97/roberhau Credits: (from where did you reuse some of the software/ideas in your project? reuse is good as long as you give proper credit. Give directory names and name of person from which you used ideas.) I reused the Demeter/Java source code Class dictionary which you used. // demjava.cd -- class dictionary for Demeter/Java // $Id: demjava.cd,v 1.47 1997/10/09 11:29:59 dougo Exp $ package EDU.neu.ccs.demeter.tools.demjava; import java.text.*; import java.util.*; import java.util.zip.*; import java.io.*; import EDU.neu.ccs.demeter.*; import EDU.neu.ccs.demeter.common.tg.*; Program = [ Package *l ] [ SList(Import) *l ] [ Preamble *l ] // For backwards compatibility. ClassGraph *EOF* . Package = "package" PackageName ";". Import = "import" PackageName [ ImportAllClasses ] ";". ImportAllClasses = ".*". Preamble = JavaCode. ClassGraph = Hashtable DList(ClassGraphEntry) [ "tg:" TraversalGraph ] . ClassGraphEntry : Directive | Definition. Directive : ParseDirective | VisitorDirective. ParseDirective : DoParse | DontParse. DoParse = "*parse*". DontParse = "*noparse*". VisitorDirective : BeginVisitors | EndVisitors. BeginVisitors = "*visitors*". EndVisitors = "*endvisitors*". Definition : ClassDef. ClassDef = List(ClassKeyword) ParamClassName [ *s ParseDirective ] *s ClassParts [ ClassMethods ] [ *s EOFtoken ] "." . ClassKeyword : PublicClass | FinalClass | InterfaceClass | VisitorClass | NotParsedClass. PublicClass = "*public*". FinalClass = "*final*". InterfaceClass = "*interface*". VisitorClass = "*visitor*". NotParsedClass = "*notparsed*". ParamClassName = ClassName ["(" Commalist(ClassName) ")"]. ClassParts : ConstOrAltClass | RepetitionClass. ConstOrAltClass : ConstructionClass | AlternationClass *common* + + + List(PartOrSyntax) ClassParents - - -. PartOrSyntax : Part | OptionalPart | Syntax. Part = [ "<" PartName ">" *s ] List(PartKeyword) ClassSpec [ PartInit ]. PartKeyword : FinalPart | StaticPart | ReadOnlyPart | PrivatePart | DerivedPart . FinalPart = "*final*". StaticPart = "*static*". ReadOnlyPart = "*read-only*". PrivatePart = "*private*". DerivedPart = "*derived*". PartInit = "*init*" *s JavaCode. OptionalPart = "[" [LocalLookahead] Sandwich(Part) "]". ClassParents = [ *s "*extends*" *s Commalist(Superclass) ] [ *s "*implements*" *s Commalist(Interface) ] . Superclass = ClassSpec. Interface = ClassSpec. ConstructionClass = "=". AlternationClass = ":" + + + [ *lookahead* (@ _Subclass() @) Barlist(Subclass) ] - - - [ Common ]. Subclass = [LocalLookahead] ClassSpec. Common = *l + + + "*common*" - - -. LocalLookahead = "*lookahead*" JavaCode. RepetitionClass = "~" Sandwich(RepeatedPart). RepeatedPart = [ ClassSpec ] "{" [LocalLookahead] Sandwich(ClassSpec) *s "}". Sandwich(S) = List(Syntax) *s S List(Syntax) . ClassSpec = ClassName ["(" Commalist(ClassSpec) ")" ] . Syntax : PlainSyntax | PrintCommand . PlainSyntax = String. PrintCommand : PrintIndent | PrintUnindent | PrintSkip | PrintSpace. PrintIndent = "+" . PrintUnindent = "-" . PrintSkip = "*l" . PrintSpace = "*s" . EOFtoken = "*EOF*". ////////////////////// // Behavior (methods). ////////////////////// ProgramBehavior = [ DList(Behavior) ] *EOF* . Behavior : StrategyDefinition | ClassBehavior. StrategyDefinition = "strategy" StrategyName "=" StrategyExpression ".". StrategyExpression : StrategyGraph | PathDirective | StrategyVariable | CompoundStrategy. StrategyGraph = "{" *l + [ "vec:" *s Vector ] SList(SGEdge) - *l "}" *s [ "source:" ClassGlobSpec ] [ "source-edge:" NList(Integer) ] [ "target:" ClassGlobSpec ] *implements* StrategyGraphI . SGEdge = ClassGlobSpec *s "->" *s ClassGlobSpec [ NegativeConstraint ]. PathDirective = [ NegativeConstraint ] List(PathSegment) TargetDirective. PathSegment = PositiveConstraint [ NegativeConstraint ]. Constraint : PositiveConstraint | NegativeConstraint *common* GlobSpec. PositiveConstraint : Through | Via. // synonyms Through = "through". Via = "via". NegativeConstraint : Bypassing | OnlyThrough. Bypassing = "bypassing". OnlyThrough = "only-through". TargetDirective : To | ToStop *common* ClassGlobSpec. To = "to". ToStop = "to-stop". StrategyVariable = "do" StrategyName. CompoundStrategy : Join | Merge | Intersect *common* "(" Commalist(StrategyExpression) ")". Join = "join". Merge = "merge". Intersect = "intersect". GlobSpec : OneGlob | GlobSet. OneGlob = Glob. GlobSet = "{" *s [ Commalist(Glob) *s ] "}". Glob : ClassGlob | EdgeGlob. EdgeGlob : PartGlob | SubclassGlob | SuperclassGlob. ClassGlob = ClassNameGlob. PartGlob = "->" *s SourceGlob "," *s PartNameGlob "," *s DestGlob. SubclassGlob = "=>" *s SourceGlob "," *s DestGlob. SuperclassGlob = ":>" *s SourceGlob "," *s DestGlob. SourceGlob = ClassNameGlob. DestGlob = ClassNameGlob. ClassNameGlob : ClassNameExact | AnyClass. ClassNameExact = ClassName. AnyClass = "*". PartNameGlob : PartNameExact | AnyPart. PartNameExact = PartName. AnyPart = "*". ClassGlobSpec : OneClassGlob | ClassGlobSet. OneClassGlob = ClassGlob. ClassGlobSet = "{" *s Commalist(ClassGlob) *s "}". ClassBehavior = ClassGlobSpec ClassMethods. ClassMethods = "{" *l + [ SList(Method) ] - *l "}" [ "wrappers:" Hashtable // maps Wrapper-kind -> HostSet ] . HostSet = [ "exact:" Hashtable ] // globs with no stars [ "partnames:" Hashtable ] // -> *,name,* globs [ "globs:" GlobSet] . // other globs Method : TraversalDef | MethodDef | Wrapper | Accessor | Constructor | ReturnValue | Verbatim. // Class graph traversal definitions. TraversalDef = "traversal" TraversalName TraversalParms *s "{" *l + StrategyExpression ";" - *l "}". TraversalParms = "(" [ Commalist(Visitor) ] ")" . Visitor = ClassName [ VisitorName ]. // Adaptive methods. MethodDef = MethodSignature MethodBody. MethodSignature = List(MethodKeyword) JavaType MethodName "(" [ Commalist(MethodParm) ] ")". MethodKeyword : PublicMethod | ProtectedMethod | PrivateMethod | StaticMethod | FinalMethod | AbstractMethod. PublicMethod = "public". ProtectedMethod = "protected". PrivateMethod = "private". StaticMethod = "static". FinalMethod = "final". AbstractMethod = "abstract". MethodParm = JavaType List(ArraySpec) ParmName List(ArraySpec). ArraySpec = "[" "]". MethodBody : VerbatimMethodBody | AdaptiveMethodBody | NoMethodBody. VerbatimMethodBody = JavaCode. AdaptiveMethodBody = TraversalExpression VisitorExpression. NoMethodBody = ";". TraversalExpression : TraversalRef | TraversalSpec. TraversalRef = [Equals] TraversalName. Equals = "=". // optional syntax TraversalSpec = StrategyExpression. VisitorExpression : VisitorRef | VisitorSpec. VisitorRef : WithVisitorRef | ParenVisitorRef. WithVisitorRef = "with" Commalist(ClassName) ";". ParenVisitorRef = "(" Commalist(ClassName) ")" ";". VisitorSpec = ClassMethods. // Before and after wrappers. Wrapper = WrapperKind HostSpec JavaCode. WrapperKind : Before | Around | After. Before = "before". Around = "around". After = "after". HostSpec : GlobSpec. // Derived part accessors. Accessor : Getter | Setter *common* PartName JavaCode . Getter = "get" . Setter = "set" . // Constructor method. // Only no-arg constructors supported for now. Constructor = "init" JavaCode. // Code for computing the return value of a visitor when used in an // adaptive method. ReturnValue = "return" [ JavaType ] JavaCode. // Verbatim java code. Verbatim = JavaCode. // Terminal buffer classes. PackageName ~ Ident { *lookahead* (@ 2 @) "." Ident }. ClassName = Name *implements* ClassNameI. PartName = Ident *implements* PartNameI. TraversalName = Name. VisitorName = Name. MethodName = Ident. ParmName = Ident. StrategyName = Ident. JavaType = Name. JavaCode = Text. Name ~ Ident { // kludge!! *lookahead* (@ "." _Ident(),{ "=:~(".indexOf(getToken(3).image) == -1 } @) "." Ident }. // Parameterized class definitions. List(S) ~ {*s S}. NList(S) ~ S {*s S}. SList(S) ~ S { *l S } . DList(S) ~ S { *l *l S } *l . Commalist(S) ~ S {"," *s S}. Barlist(S) ~ S { *l "|" *s S}. *noparse* // Utility classes. TraversalMethodName = MethodName. ClassType = boolean boolean boolean boolean boolean boolean boolean boolean. PartType = boolean boolean boolean boolean boolean . Parts ~ { Part }. // Visitors. *visitors* ConstructionRuleGenerator = [ ClassName ] boolean boolean. ClassGlobVisitor : SourceEdgeCollector . SourceEdgeCollector = StrategyGraph NList(Integer). BehaviorCodeGenerator = ClassDef ClassName PartName HostSpec WrapperCodeGenerator. WrapperClassChecker = ClassName. LookaheadPrinter = . ClassNameAccessor : . ClassDefVisitor : NonParamDefCollector | GlobalBehaviorAttacher | TGVertexCollector | RuleGenerator . NonParamDefCollector = ClassGraph. GlobalBehaviorAttacher = ClassMethods. RuleGenerator = . PartVisitor : PartNameSetter | ParamReplacer | RuleDeclGenerator | TerminalCollector . PartNameSetter = . ParamReplacer = Commalist(ClassName) Commalist(ClassSpec). RuleDeclGenerator = . TerminalCollector = . EdgeVisitor : . GlobVisitor : GlobMatcher | GlobCollector | ClassGlobCollector | EdgeGlobCollector | OutgoingEdgeSpecConvertor | SGEdgeMatcher . GlobMatcher = Glob boolean. GlobCollector = GlobSet. ClassGlobCollector = ClassGlobSet. EdgeGlobCollector = GlobSet. OutgoingEdgeSpecConvertor = GlobSet. SGEdgeMatcher = ClassNameI int Vector. VisitorNameVisitor : WrapperCallGenerator. WrapperCallGenerator = WrapperKind String boolean Glob ClassName String. WrapperCodeGenerator = WrapperKind Text. PartGetter = PartName Part boolean . TGVertexCollector = TraversalGraph. TGEdgeGlobMaker = ClassName ClassName ClassName PartName Glob *extends* TGEdgeVisitor. // HTML related classes: HtmlClassIndex = . HtmlVisitor = int boolean *extends* UniversalVisitor. // TAO stuff: TAOVisitor : FindVisitorTargetsV |CreateMethodsV . FindVisitorTargetsV = Vector Vector Vector String Vector. CreateMethodsV = ClassDef String String Vector Vector Vector boolean Vector String String String String String String int int boolean Vector String String String String Vector . Growth plans which you used. Phase 1 A hyperlinked list of files related to the adaptive program will be created, allowing the user to click on any filename and see the related file Phase 2 The class dictionary and a behavior file will be hyperlinked via classes, allowing the user to click on any class and see the corresponding class in the other file Phase 3 Classes within Java files will hyperlinked to the corresponding classes within the Class Dictionary and Behavior files. A class index with references to all occurences of a class will be generated Parts of your project which you would have developed further if you had more time. Include a list of known bugs here. (The more bugs you know, the better you have tested your project!) - A keyword in a sentence is hyperlinked to the corresponding class - A java parser could analyze and hyperlink the java portions between (@ and @) including classes and methods. - It may be possible/useful to allow user to specify an HtmlVisitor, like the PrintVisitor, to allow them to generate their own HTML. - User can run a demonstration of the program and see the output Since the user's program is in Java, generating an applet could be investigated. - Documenting an adaptive program could possibly be made generic, maybe by feeding it a Class Diagram, so it could handle C++, Perl, etc. - Exception Handling could be improved List of known bugs: Aspect files are not dealt with. Names of files where test inputs can be found. visitor-by-hand/program.beh visitor-by-hand/program.cd visitor-by-hand/program.input demjava/AroundContinuation.java demjava/GNUmakefile demjava/Graph.java demjava/Ident.java demjava/TAO.beh demjava/Text.java demjava/adapmeth.beh demjava/collect.beh demjava/demjava.cd demjava/derived.beh demjava/expand.beh demjava/gencode.beh demjava/gencopyvis.beh demjava/gendisplayvis.beh demjava/genequalvis.beh demjava/gengrammar.beh demjava/genprintvis.beh demjava/gentracevis.beh demjava/genuniversal.beh demjava/glob.beh demjava/inherit.beh demjava/main.beh demjava/param.beh demjava/partname.beh demjava/program.beh demjava/repetition.beh demjava/strategy.beh demjava/subgraph.beh demjava/utils.beh demjava/wrapper.beh demjava/tg/GNUmakefile demjava/tg/tg.beh demjava/tg/tg.cd Names of files where outputs can be found. visitor-by-hand/html/index.html visitor-by-hand/html/referfile.html visitor-by-hand/html/program.cd.html visitor-by-hand/html/program.beh.html visitor-by-hand/html/gen/A.java.html visitor-by-hand/html/gen/B.java.html visitor-by-hand/html/gen/C.java.html visitor-by-hand/html/gen/D.java.html visitor-by-hand/html/gen/E.java.html visitor-by-hand/html/gen/F.java.html visitor-by-hand/html/gen/G.java.html visitor-by-hand/html/gen/H.java.html visitor-by-hand/html/gen/Main.java.html visitor-by-hand/html/gen/PrintingVisitor2.java.html visitor-by-hand/html/program.input.html demjava/html/index.html demjava/html/referfile.html demjava/html/demjava.cd.html demjava/html/main.beh.html demjava/html/utils.beh.html demjava/html/param.beh.html demjava/html/repetition.beh.html demjava/html/genuniversal.beh.html demjava/html/genprintvis.beh.html demjava/html/gencopyvis.beh.html demjava/html/genequalvis.beh.html demjava/html/gendisplayvis.beh.html demjava/html/gentracevis.beh.html demjava/html/partname.beh.html demjava/html/inherit.beh.html demjava/html/collect.beh.html demjava/html/derived.beh.html demjava/html/adapmeth.beh.html demjava/html/expand.beh.html demjava/html/strategy.beh.html demjava/html/subgraph.beh.html demjava/html/glob.beh.html demjava/html/wrapper.beh.html demjava/html/gencode.beh.html demjava/html/gengrammar.beh.html demjava/html/TAO.beh.html demjava/html/gen/Program.java.html demjava/html/gen/Package.java.html demjava/html/gen/Import.java.html demjava/html/gen/ImportAllClasses.java.html demjava/html/gen/Preamble.java.html demjava/html/gen/ClassGraph.java.html demjava/html/gen/ClassGraphEntry.java.html demjava/html/gen/Directive.java.html demjava/html/gen/ParseDirective.java.html demjava/html/gen/DoParse.java.html demjava/html/gen/DontParse.java.html demjava/html/gen/VisitorDirective.java.html demjava/html/gen/BeginVisitors.java.html demjava/html/gen/EndVisitors.java.html demjava/html/gen/Definition.java.html demjava/html/gen/ClassDef.java.html demjava/html/gen/ClassKeyword.java.html demjava/html/gen/PublicClass.java.html demjava/html/gen/FinalClass.java.html demjava/html/gen/InterfaceClass.java.html demjava/html/gen/VisitorClass.java.html demjava/html/gen/NotParsedClass.java.html demjava/html/gen/ParamClassName.java.html demjava/html/gen/ClassParts.java.html demjava/html/gen/ConstOrAltClass.java.html demjava/html/gen/PartOrSyntax.java.html demjava/html/gen/Part.java.html demjava/html/gen/PartKeyword.java.html demjava/html/gen/FinalPart.java.html demjava/html/gen/StaticPart.java.html demjava/html/gen/ReadOnlyPart.java.html demjava/html/gen/PrivatePart.java.html demjava/html/gen/DerivedPart.java.html demjava/html/gen/PartInit.java.html demjava/html/gen/OptionalPart.java.html demjava/html/gen/ClassParents.java.html demjava/html/gen/Superclass.java.html demjava/html/gen/Interface.java.html demjava/html/gen/ConstructionClass.java.html demjava/html/gen/AlternationClass.java.html demjava/html/gen/Subclass.java.html demjava/html/gen/Common.java.html demjava/html/gen/LocalLookahead.java.html demjava/html/gen/RepetitionClass.java.html demjava/html/gen/RepeatedPart.java.html demjava/html/gen/Sandwich.java.html demjava/html/gen/ClassSpec.java.html demjava/html/gen/Syntax.java.html demjava/html/gen/PlainSyntax.java.html demjava/html/gen/PrintCommand.java.html demjava/html/gen/PrintIndent.java.html demjava/html/gen/PrintUnindent.java.html demjava/html/gen/PrintSkip.java.html demjava/html/gen/PrintSpace.java.html demjava/html/gen/EOFtoken.java.html demjava/html/gen/ProgramBehavior.java.html demjava/html/gen/Behavior.java.html demjava/html/gen/StrategyDefinition.java.html demjava/html/gen/StrategyExpression.java.html demjava/html/gen/StrategyGraph.java.html demjava/html/gen/SGEdge.java.html demjava/html/gen/PathDirective.java.html demjava/html/gen/PathSegment.java.html demjava/html/gen/Constraint.java.html demjava/html/gen/PositiveConstraint.java.html demjava/html/gen/Through.java.html demjava/html/gen/Via.java.html demjava/html/gen/NegativeConstraint.java.html demjava/html/gen/Bypassing.java.html demjava/html/gen/OnlyThrough.java.html demjava/html/gen/TargetDirective.java.html demjava/html/gen/To.java.html demjava/html/gen/ToStop.java.html demjava/html/gen/StrategyVariable.java.html demjava/html/gen/CompoundStrategy.java.html demjava/html/gen/Join.java.html demjava/html/gen/Merge.java.html demjava/html/gen/Intersect.java.html demjava/html/gen/GlobSpec.java.html demjava/html/gen/OneGlob.java.html demjava/html/gen/GlobSet.java.html demjava/html/gen/Glob.java.html demjava/html/gen/EdgeGlob.java.html demjava/html/gen/ClassGlob.java.html demjava/html/gen/PartGlob.java.html demjava/html/gen/SubclassGlob.java.html demjava/html/gen/SuperclassGlob.java.html demjava/html/gen/SourceGlob.java.html demjava/html/gen/DestGlob.java.html demjava/html/gen/ClassNameGlob.java.html demjava/html/gen/ClassNameExact.java.html demjava/html/gen/AnyClass.java.html demjava/html/gen/PartNameGlob.java.html demjava/html/gen/PartNameExact.java.html demjava/html/gen/AnyPart.java.html demjava/html/gen/ClassGlobSpec.java.html demjava/html/gen/OneClassGlob.java.html demjava/html/gen/ClassGlobSet.java.html demjava/html/gen/ClassBehavior.java.html demjava/html/gen/ClassMethods.java.html demjava/html/gen/HostSet.java.html demjava/html/gen/Method.java.html demjava/html/gen/TraversalDef.java.html demjava/html/gen/TraversalParms.java.html demjava/html/gen/Visitor.java.html demjava/html/gen/MethodDef.java.html demjava/html/gen/MethodSignature.java.html demjava/html/gen/MethodKeyword.java.html demjava/html/gen/PublicMethod.java.html demjava/html/gen/ProtectedMethod.java.html demjava/html/gen/PrivateMethod.java.html demjava/html/gen/StaticMethod.java.html demjava/html/gen/FinalMethod.java.html demjava/html/gen/AbstractMethod.java.html demjava/html/gen/MethodParm.java.html demjava/html/gen/ArraySpec.java.html demjava/html/gen/MethodBody.java.html demjava/html/gen/VerbatimMethodBody.java.html demjava/html/gen/AdaptiveMethodBody.java.html demjava/html/gen/NoMethodBody.java.html demjava/html/gen/TraversalExpression.java.html demjava/html/gen/TraversalRef.java.html demjava/html/gen/Equals.java.html demjava/html/gen/TraversalSpec.java.html demjava/html/gen/VisitorExpression.java.html demjava/html/gen/VisitorRef.java.html demjava/html/gen/WithVisitorRef.java.html demjava/html/gen/ParenVisitorRef.java.html demjava/html/gen/VisitorSpec.java.html demjava/html/gen/Wrapper.java.html demjava/html/gen/WrapperKind.java.html demjava/html/gen/Before.java.html demjava/html/gen/Around.java.html demjava/html/gen/After.java.html demjava/html/gen/HostSpec.java.html demjava/html/gen/Accessor.java.html demjava/html/gen/Getter.java.html demjava/html/gen/Setter.java.html demjava/html/gen/Constructor.java.html demjava/html/gen/ReturnValue.java.html demjava/html/gen/Verbatim.java.html demjava/html/gen/PackageName.java.html demjava/html/gen/ClassName.java.html demjava/html/gen/PartName.java.html demjava/html/gen/TraversalName.java.html demjava/html/gen/VisitorName.java.html demjava/html/gen/MethodName.java.html demjava/html/gen/ParmName.java.html demjava/html/gen/StrategyName.java.html demjava/html/gen/JavaType.java.html demjava/html/gen/JavaCode.java.html demjava/html/gen/Name.java.html demjava/html/gen/List.java.html demjava/html/gen/NList.java.html demjava/html/gen/SList.java.html demjava/html/gen/DList.java.html demjava/html/gen/Commalist.java.html demjava/html/gen/Barlist.java.html demjava/html/gen/TraversalMethodName.java.html demjava/html/gen/ClassType.java.html demjava/html/gen/PartType.java.html demjava/html/gen/Parts.java.html demjava/html/gen/ConstructionRuleGenerator.java.html demjava/html/gen/ClassGlobVisitor.java.html demjava/html/gen/SourceEdgeCollector.java.html demjava/html/gen/BehaviorCodeGenerator.java.html demjava/html/gen/WrapperClassChecker.java.html demjava/html/gen/LookaheadPrinter.java.html demjava/html/gen/ClassNameAccessor.java.html demjava/html/gen/ClassDefVisitor.java.html demjava/html/gen/NonParamDefCollector.java.html demjava/html/gen/GlobalBehaviorAttacher.java.html demjava/html/gen/RuleGenerator.java.html demjava/html/gen/PartVisitor.java.html demjava/html/gen/PartNameSetter.java.html demjava/html/gen/ParamReplacer.java.html demjava/html/gen/RuleDeclGenerator.java.html demjava/html/gen/TerminalCollector.java.html demjava/html/gen/EdgeVisitor.java.html demjava/html/gen/GlobVisitor.java.html demjava/html/gen/GlobMatcher.java.html demjava/html/gen/GlobCollector.java.html demjava/html/gen/ClassGlobCollector.java.html demjava/html/gen/EdgeGlobCollector.java.html demjava/html/gen/OutgoingEdgeSpecConvertor.java.html demjava/html/gen/SGEdgeMatcher.java.html demjava/html/gen/VisitorNameVisitor.java.html demjava/html/gen/WrapperCallGenerator.java.html demjava/html/gen/WrapperCodeGenerator.java.html demjava/html/gen/PartGetter.java.html demjava/html/gen/TGVertexCollector.java.html demjava/html/gen/TGEdgeGlobMaker.java.html demjava/html/gen/TAOVisitor.java.html demjava/html/gen/FindVisitorTargetsV.java.html demjava/html/gen/CreateMethodsV.java.html Include one interesting input/output pair in this file. (well, if your output is graphical, maybe you have some printed form for the graphical information.) demjava/ Include one interesting input/output pair where the behavior of your program could be improved. visitor-by-hand/program.input visitor-by-hand/html/program.input.html An improvement would be to actually parse and hyperlink the input file to the rest of the program. Any information which you think is useful to properly reuse your software. A simplifying assumption was made that there was only 1 cd file. If more are enabled in the future, the beh files can't be generated before the cd files are parsed, so the beh files know which cd to reference. I tried to keep my code changes partitioned from demjava as much as possible, and therefore some code was duplicated, such as modifying an existing method's arguments to make it more flexible (e.g. ensureDirectory and ensureOutputDirectory). This was done to keep from breaking any behavior in demjava and to allow the enhancement to be more easily reused elsewhere. The HtmlVisitor is taken from PrintVisitor.beh and modified. It may therefore be more brittle regarding demjava syntax changes. Instead, a HtmlVisitor.beh could probably be generated the way PrintVisitor.beh is generated (I abandoned my attempt after 1 day). Regression testing should be done on demjava to ensure no old behavior was affected. Files modified in demjava 0.6.4: GNUmakefile, demjava.cd, main.beh, gencode.beh, genhtml.beh, htmlvis.beh Please answer the following questions: Did you change the generated Java code? No. If you had the priviledge to have one of my graduate students as host or if you had interactions with the teaching assistant, an evaluation of their performance would be welcome. N/A -- Roy Oberhauser /_ _ Application Delivery Lab, HP-UX System Technology Center / / /_/ HP, 19447 Pruneridge Ave., MS 47LA1, Cupertino, CA 95014 / roberhau@cup.hp.com, Telnet/(408)447-0589, FAX (408)447-4960