<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> |