| <html><head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
| <title>Appendix A. A Grammar for the AspectJ 5 Language</title><link rel="stylesheet" href="aspectj-docs.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.44"><link rel="home" href="index.html" title="The AspectJTM 5 Development Kit Developer's Notebook"><link rel="up" href="index.html" title="The AspectJTM 5 Development Kit Developer's Notebook"><link rel="previous" href="ltw.html" title="Chapter 12. Load-Time Weaving"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. A Grammar for the AspectJ 5 Language</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ltw.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><h2 class="title"><a name="grammar"></a>Appendix A. A Grammar for the AspectJ 5 Language</h2></div></div><pre class="programlisting"> | |
| === 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... | |
| </pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ltw.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left">Chapter 12. Load-Time Weaving </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> </td></tr></table></div></body></html> |