demjava.cd.html
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 = [ <pkg> Package*l] [ <imports> SList(Import)*l] [ Preamble*l] <cg> ClassGraph *EOF*.
Package = "package" PackageName ";".
Import = "import" PackageName [ ImportAllClasses] ";".
ImportAllClasses = ".*".
Preamble = JavaCode.
ClassGraph = <defdict> Hashtable <classes> DList(ClassGraphEntry) ["tg:" <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 = <keywords> 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 ["(" <parameters> Commalist(ClassName)")"].
ClassParts : ConstOrAltClass
| RepetitionClass .
ConstOrAltClass : ConstructionClass
| AlternationClass
*common* + + + <parts> List(PartOrSyntax) <parents> ClassParents - - -.
PartOrSyntax : Part
| OptionalPart
| Syntax .
Part = ["<" PartName ">" *s] <keywords> 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] <part> Sandwich(Part) "]".
ClassParents = [*s "*extends*" *s <superclasses> Commalist(Superclass)] [*s "*implements*" *s <interfaces> Commalist(Interface)].
Superclass = ClassSpec.
Interface = ClassSpec.
ConstructionClass = "=".
AlternationClass = ":" + + + [*lookahead*(@ _Subclass() @) <subclasses> Barlist(Subclass)] - - - [ Common].
Subclass = [ LocalLookahead] ClassSpec.
Common = *l + + + "*common*" - - -.
LocalLookahead = "*lookahead*" JavaCode.
RepetitionClass = "~" <sandwiched> Sandwich(RepeatedPart).
RepeatedPart = [ <nonempty> ClassSpec] "{" [ LocalLookahead] <repeated> Sandwich(ClassSpec) *s "}".
Sandwich(S) = <first> List(Syntax) *s <inner> S <second> List(Syntax).
ClassSpec = ClassName ["(" <actual_parameters> Commalist(ClassSpec)")"].
Syntax : PlainSyntax
| PrintCommand .
PlainSyntax = <string> String.
PrintCommand : PrintIndent
| PrintUnindent
| PrintSkip
| PrintSpace .
PrintIndent = "+".
PrintUnindent = "-".
PrintSkip = "*l".
PrintSpace = "*s".
EOFtoken = "*EOF*".
ProgramBehavior = [ <behavior> DList(Behavior)] *EOF*.
Behavior : StrategyDefinition
| ClassBehavior .
StrategyDefinition = "strategy" StrategyName "=" <exp> StrategyExpression ".".
StrategyExpression : StrategyGraph
| PathDirective
| StrategyVariable
| CompoundStrategy .
StrategyGraph = "{" *l + ["vec:" *s <edgeVec> Vector] <edges> SList(SGEdge) - *l "}" *s ["source:" <sources> ClassGlobSpec] ["source-edge:" <sourceEdges> NList(Integer)] ["target:" <targets> ClassGlobSpec] *implements* StrategyGraphI.
SGEdge = <source> ClassGlobSpec *s "->" *s <dest> ClassGlobSpec [ <constraint> NegativeConstraint].
PathDirective = [ <constraint> NegativeConstraint] <segments> List(PathSegment) TargetDirective.
PathSegment = <node> PositiveConstraint [ <constraint> NegativeConstraint].
Constraint : PositiveConstraint
| NegativeConstraint
*common* <glob> GlobSpec.
PositiveConstraint : Through
| Via .
Through = "through".
Via = "via".
NegativeConstraint : Bypassing
| OnlyThrough .
Bypassing = "bypassing".
OnlyThrough = "only-through".
TargetDirective : To
| ToStop
*common* <targets> ClassGlobSpec.
To = "to".
ToStop = "to-stop".
StrategyVariable = "do" StrategyName.
CompoundStrategy : Join
| Merge
| Intersect
*common* "(" <args> Commalist(StrategyExpression) ")".
Join = "join".
Merge = "merge".
Intersect = "intersect".
GlobSpec : OneGlob
| GlobSet .
OneGlob = Glob.
GlobSet = "{" *s [ <globs> Commalist(Glob)*s] "}".
Glob : ClassGlob
| EdgeGlob .
EdgeGlob : PartGlob
| SubclassGlob
| SuperclassGlob .
ClassGlob = <name> ClassNameGlob.
PartGlob = "->" *s <source> SourceGlob "," *s <name> PartNameGlob "," *s <dest> DestGlob.
SubclassGlob = "=>" *s <source> SourceGlob "," *s <dest> DestGlob.
SuperclassGlob = ":>" *s <source> SourceGlob "," *s <dest> DestGlob.
SourceGlob = <name> ClassNameGlob.
DestGlob = <name> ClassNameGlob.
ClassNameGlob : ClassNameExact
| AnyClass .
ClassNameExact = ClassName.
AnyClass = "*".
PartNameGlob : PartNameExact
| AnyPart .
PartNameExact = PartName.
AnyPart = "*".
ClassGlobSpec : OneClassGlob
| ClassGlobSet .
OneClassGlob = ClassGlob.
ClassGlobSet = "{" *s <globs> Commalist(ClassGlob) *s "}".
ClassBehavior = <classes> ClassGlobSpec <methods> ClassMethods.
ClassMethods = "{" *l + [ <methods> SList(Method)] - *l "}" ["wrappers:" <wrapperdict> Hashtable].
HostSet = ["exact:" <exactHosts> Hashtable] ["partnames:" <partnames> Hashtable] ["globs:" <globs> GlobSet].
Method : TraversalDef
| MethodDef
| Wrapper
| Accessor
| Constructor
| ReturnValue
| Verbatim .
TraversalDef = "traversal" <name> TraversalName <parms> TraversalParms *s "{" *l + <strat> StrategyExpression ";" - *l "}".
TraversalParms = "(" [ <visitors> Commalist(Visitor)] ")".
Visitor = ClassName [ VisitorName].
MethodDef = MethodSignature MethodBody.
MethodSignature = <keywords> List(MethodKeyword) <returnType> JavaType <name> MethodName "(" [ <parms> Commalist(MethodParm)] ")".
MethodKeyword : PublicMethod
| ProtectedMethod
| PrivateMethod
| StaticMethod
| FinalMethod
| AbstractMethod .
PublicMethod = "public".
ProtectedMethod = "protected".
PrivateMethod = "private".
StaticMethod = "static".
FinalMethod = "final".
AbstractMethod = "abstract".
MethodParm = <type> JavaType <array1> List(ArraySpec) <name> ParmName <array2> List(ArraySpec).
ArraySpec = "[" "]".
MethodBody : VerbatimMethodBody
| AdaptiveMethodBody
| NoMethodBody .
VerbatimMethodBody = JavaCode.
AdaptiveMethodBody = <trv> TraversalExpression <vis> VisitorExpression.
NoMethodBody = ";".
TraversalExpression : TraversalRef
| TraversalSpec .
TraversalRef = [ Equals] <name> TraversalName.
Equals = "=".
TraversalSpec = <strat> StrategyExpression.
VisitorExpression : VisitorRef
| VisitorSpec .
VisitorRef : WithVisitorRef
| ParenVisitorRef .
WithVisitorRef = "with" <visitorClasses> Commalist(ClassName) ";".
ParenVisitorRef = "(" <visitorClasses> Commalist(ClassName) ")" ";".
VisitorSpec = <methods> ClassMethods.
Wrapper = <kind> WrapperKind <hosts> HostSpec JavaCode.
WrapperKind : Before
| Around
| After .
Before = "before".
Around = "around".
After = "after".
HostSpec : GlobSpec .
Accessor : Getter
| Setter
*common* PartName JavaCode.
Getter = "get".
Setter = "set".
Constructor = "init" JavaCode.
ReturnValue = "return" [ <type> JavaType] <exp> JavaCode.
Verbatim = JavaCode.
PackageName ~ Ident{*lookahead*(@ 2 @) "." Ident }.
ClassName = <name> Name *implements* ClassNameI.
PartName = <name> Ident *implements* PartNameI.
TraversalName = Name.
VisitorName = Name.
MethodName = <name> Ident.
ParmName = <name> Ident.
StrategyName = <name> Ident.
JavaType = <type> Name.
JavaCode = <code> Text.
Name ~ Ident{*lookahead*(@ "." _Ident(),{ "=:~(".indexOf(getToken(3).image) == -1 } @) "." Ident }.
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*
TraversalMethodName = MethodName.
ClassType = <is_con> boolean <is_alt> boolean <is_rep> boolean <is_public> boolean <is_final> boolean <is_interface> boolean <is_not_parsed> boolean <is_visitor> boolean.
PartType = <is_final> boolean <is_static> boolean <is_derived> boolean <has_getter> boolean <has_setter> boolean.
Parts ~ Part }.
*visitors*
ConstructionRuleGenerator = [ ClassName] <opt> boolean <constr> boolean.
ClassGlobVisitor : SourceEdgeCollector .
SourceEdgeCollector = <sg> StrategyGraph <edges> NList(Integer).
BehaviorCodeGenerator = ClassDef ClassName PartName <hosts> HostSpec <gen> WrapperCodeGenerator.
WrapperClassChecker = ClassName.
LookaheadPrinter = .
ClassNameAccessor : .
ClassDefVisitor : NonParamDefCollector
| GlobalBehaviorAttacher
| TGVertexCollector
| RuleGenerator .
NonParamDefCollector = <cg> ClassGraph.
GlobalBehaviorAttacher = <methods> ClassMethods.
RuleGenerator = .
PartVisitor : PartNameSetter
| ParamReplacer
| RuleDeclGenerator
| TerminalCollector .
PartNameSetter = .
ParamReplacer = <params> Commalist(ClassName) <actuals> Commalist(ClassSpec).
RuleDeclGenerator = .
TerminalCollector = .
EdgeVisitor : .
GlobVisitor : GlobMatcher
| GlobCollector
| ClassGlobCollector
| EdgeGlobCollector
| OutgoingEdgeSpecConvertor
| SGEdgeMatcher .
GlobMatcher = Glob <found_one> boolean.
GlobCollector = <spec> GlobSet.
ClassGlobCollector = <spec> ClassGlobSet.
EdgeGlobCollector = <spec> GlobSet.
OutgoingEdgeSpecConvertor = <spec> GlobSet.
SGEdgeMatcher = <c> ClassNameI <index> int <return_val> Vector.
VisitorNameVisitor : WrapperCallGenerator .
WrapperCallGenerator = <kind> WrapperKind <cont> String <indent> boolean Glob <visclname> ClassName <return_val> String.
WrapperCodeGenerator = <kind> WrapperKind <code> Text.
PartGetter = PartName <answer> Part <isPart> boolean.
TGVertexCollector = <tg> TraversalGraph.
TGEdgeGlobMaker = <s> ClassName <d> ClassName <cl> ClassName <name> PartName <return_val> Glob *extends* TGEdgeVisitor.
HtmlClassNameVisitor = .
HtmlClassIndex = .
HtmlVisitor = <indent> int <needSpace> boolean *extends* UniversalVisitor.
TAOVisitor : FindVisitorTargetsV
| CreateMethodsV .
FindVisitorTargetsV = <btargets> Vector <atargets> Vector <aroundtargets> Vector <visitorname> String <doing> Vector.
CreateMethodsV = <rcd> ClassDef <baseclassname> String <classname> String <btargets> Vector <atargets> Vector <aroundtargets> Vector <abort> boolean <doneclasses> Vector <makeprotoparts> String <makeprotosubclasses> String <makeprotomain> String <pathtravmain> String <traverseparts> String <traversesubclasses> String <partcounter> int <subclasscounter> int <optionalpart> boolean <partsdone> Vector <graphstr> String <partstr> String <subclassstr> String <visitorstr> String <hierarchy> Vector.