123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <appendix id="grammar" xreflabel="AspectJ 5 Grammar">
-
- <title>A Grammar for the AspectJ 5 Language</title>
-
- <programlisting><![CDATA[
- === type patterns ===
-
- TypePattern := SimpleTypePattern |
- '!' TypePattern |
- '(' AnnotationPattern? TypePattern ')'
- TypePattern '&&' TypePattern |
- TypePattern '||' TypePattern
-
- SimpleTypePattern := DottedNamePattern '+'? '[]'*
-
- DottedNamePattern := FullyQualifiedName RestOfNamePattern? |
- '*' NotStarNamePattern?
-
- RestOfNamePattern := '..' DottedNamePattern |
- '*' NotStarNamePattern?
-
- NotStarNamePattern := FullyQualifiedName RestOfNamePattern? |
- '..' DottedNamePattern
-
- FullyQualifiedName := JavaIdentifierCharacter+ ('.' JavaIdentifierCharacter+)*
-
- === annotation patterns ===
-
- AnnotationPattern := '!'? '@' AnnotationTypePattern AnnotationPattern*
-
-
- AnnotationTypePattern := FullyQualifiedName |
- '(' TypePattern ')'
-
- === signature patterns ===
-
- -- field --
-
- FieldPattern :=
- AnnotationPattern? FieldModifiersPattern?
- TypePattern (TypePattern DotOrDotDot)? SimpleNamePattern
-
- FieldModifiersPattern := '!'? FieldModifier FieldModifiersPattern*
-
- FieldModifier := 'public' | 'private' | 'protected' | 'static' |
- 'transient' | 'final'
-
- DotOrDotDot := '.' | '..'
-
- SimpleNamePattern := JavaIdentifierChar+ ('*' SimpleNamePattern)?
-
- -- method --
-
- MethodPattern :=
- AnnotationPattern? MethodModifiersPattern? TypePattern
- (TypePattern DotOrDotDot)? SimpleNamePattern
- '(' FormalsPattern ')' ThrowsPattern?
-
- MethodModifiersPattern := '!'? MethodModifier MethodModifiersPattern*
-
- MethodModifier := 'public' | 'private' | 'protected' | 'static' |
- 'synchronized' | 'final'
-
- FormalsPattern := '..' (',' FormalsPatternAfterDotDot)? |
- OptionalParensTypePattern (',' FormalsPattern)* |
- TypePattern '...'
-
- FormalsPatternAfterDotDot :=
- OptionalParensTypePattern (',' FormalsPatternAfterDotDot)* |
- TypePattern '...'
-
- ThrowsPattern := 'throws' TypePatternList
-
- TypePatternList := TypePattern (',' TypePattern)*
-
- -- constructor --
-
- ConstructorPattern :=
- AnnotationPattern? ConstructorModifiersPattern?
- (TypePattern DotOrDotDot)? 'new' '(' FormalsPattern ')'
- ThrowsPattern?
-
- ConstructorModifiersPattern := '!'? ConstructorModifier ConstructorModifiersPattern*
-
- ConstructorModifier := 'public' | 'private' | 'protected'
-
- === Pointcuts ===
-
- PointcutPrimitive :=
- Call | Execution | Get | Set | Handler |
- Initialization | PreInitialization |
- StaticInitialization | AdviceExecution |
- This | Target | Args | CFlow | CFlowBelow |
- Within | WithinCode | If |
- AnnotationPointcut
-
- AnnotationPointcut := AtAnnotation | AtThis | AtTarget |
- AtWithin | AtWithinCode | AtArgs
-
-
- Call := 'call' '(' MethodOrConstructorPattern ')'
-
- MethodOrConstructorPattern := MethodPattern | ConstructorPattern
-
- Execution := 'execution' '(' MethodOrConstructorPattern ')'
-
- Get := 'get' '(' FieldPattern ')'
- Set := 'set' '(' FieldPattern ')'
- Handler := 'handler' '(' OptionalParensTypePattern ')'
- Initialization := 'initialization' '(' ConstructorPattern ')'
- PreInitialization := 'preinitialization' '(' ConstructorPattern ')'
- StaticInitialization := 'staticinitialization' '(' OptionalParensTypePattern ')'
- AdviceExecution := 'adviceexecution' '(' ')'
- This := 'this' '(' TypeOrIdentifier ')'
- Target := 'target' '(' TypeOrIdentifier ')'
- Args := 'args' '(' FormalsOrIdentifiersPattern ')'
- CFlow := 'cflow' '(' Pointcut ')'
- CFlowBelow := 'cflowbelow' '(' Pointcut ')'
- Within := 'within' '(' OptionalParensTypePattern ')'
- WithinCode := 'withincode' '(' OptionalParensTypePattern ')'
- If := 'if' '(' BooleanJavaExpression ')'
-
- TypeOrIdentifier := FullyQualifiedName ('[' ']')* | Identifier
- Identifier := JavaIdentifierChar+
-
- FormalsOrIdentifiersPattern :=
- '..' (',' FormalsOrIdentifiersPatternAfterDotDot)? |
- TypeOrIdentifier (',' FormalsOrIdentifiersPattern)* |
- '*' (',' FormalsOrIdentifiersPattern)*
-
- FormalsOrIdentifiersPatternAfterDotDot :=
- TypeOrIdentifier (',' FormalsOrIdentifiersPatternAfterDotDot)* |
- '*' (',' FormalsOrIdentifiersPatternAfterDotDot)*
-
- AtAnnotation := '@annotation' '(' AnnotationOrIdentifier ')'
- AtThis := '@this' '(' AnnotationOrIdentifer ')'
- AtTarget := '@target' '(' AnnotationOrIdentifier ')'
- AtWithin := '@within' '(' AnnotationOrIdentifier ')'
- AtWithinCode := '@withincode' '(' AnnotationOrIdentifier ')'
-
- AnnotationOrIdentifier := FullyQualifiedName | Identifier
-
- AtArgs := '@args' '(' AnnotationsOrIdentifiersPattern ')'
-
- AnnotationsOrIdentifiersPattern :=
- '..' (',' AnnotationsOrIdentifiersPatternAfterDotDot)? |
- AnnotationOrIdentifier (',' AnnotationsOrIdentifiersPattern)* |
- '*' (',' AnnotationsOrIdentifiersPattern)*
-
- AnnotationsOrIdentifiersPatternAfterDotDot :=
- AnnotationOrIdentifier (',' AnnotationsOrIdentifiersPatternAfterDotDot)* |
- '*' (',' AnnotationsOrIdentifiersPatternAfterDotDot)*
-
- PointcutDeclaration := PointcutModifiers? 'pointcut' Identifier Formals
- ':' PointcutExpression
-
- PointcutModifiers := PointcutModifier*
-
- PointcutModifier := 'public' | 'private' | 'protected' | 'abstract'
-
- Formals := '(' ParamList? ')'
- ParamList := FullyQualifiedName Identifier (',' ParamList)*
-
- ReferencePointcut := (FullyQualifiedName '.')? Identifier Formals
-
- PointcutExpression := (PointcutPrimitive | ReferencePointcut) |
- '!' PointcutExpression |
- '(' PointcutExpression ')' |
- PointcutExpression '&&' PointcutExpression |
- PointcutExpression '||' PointcutExpression
-
- === Advice ===
-
- to be written...
-
- === Inter-type Declarations ===
-
- to be written...
-
- === Declare Statements ===
-
- to be written...
-
- === Aspects ===
-
- to be written...
- ]]></programlisting>
-
- </appendix>
|