Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <appendix id="grammar" xreflabel="AspectJ 5 Grammar">
  2. <title>A Grammar for the AspectJ 5 Language</title>
  3. <programlisting><![CDATA[
  4. === type patterns ===
  5. TypePattern := SimpleTypePattern |
  6. '!' TypePattern |
  7. '(' AnnotationPattern? TypePattern ')'
  8. TypePattern '&&' TypePattern |
  9. TypePattern '||' TypePattern
  10. SimpleTypePattern := DottedNamePattern '+'? '[]'*
  11. DottedNamePattern := FullyQualifiedName RestOfNamePattern? |
  12. '*' NotStarNamePattern?
  13. RestOfNamePattern := '..' DottedNamePattern |
  14. '*' NotStarNamePattern?
  15. NotStarNamePattern := FullyQualifiedName RestOfNamePattern? |
  16. '..' DottedNamePattern
  17. FullyQualifiedName := JavaIdentifierCharacter+ ('.' JavaIdentifierCharacter+)*
  18. === annotation patterns ===
  19. AnnotationPattern := '!'? '@' AnnotationTypePattern AnnotationPattern*
  20. AnnotationTypePattern := FullyQualifiedName |
  21. '(' TypePattern ')'
  22. === signature patterns ===
  23. -- field --
  24. FieldPattern :=
  25. AnnotationPattern? FieldModifiersPattern?
  26. TypePattern (TypePattern DotOrDotDot)? SimpleNamePattern
  27. FieldModifiersPattern := '!'? FieldModifier FieldModifiersPattern*
  28. FieldModifier := 'public' | 'private' | 'protected' | 'static' |
  29. 'transient' | 'final'
  30. DotOrDotDot := '.' | '..'
  31. SimpleNamePattern := JavaIdentifierChar+ ('*' SimpleNamePattern)?
  32. -- method --
  33. MethodPattern :=
  34. AnnotationPattern? MethodModifiersPattern? TypePattern
  35. (TypePattern DotOrDotDot)? SimpleNamePattern
  36. '(' FormalsPattern ')' ThrowsPattern?
  37. MethodModifiersPattern := '!'? MethodModifier MethodModifiersPattern*
  38. MethodModifier := 'public' | 'private' | 'protected' | 'static' |
  39. 'synchronized' | 'final'
  40. FormalsPattern := '..' (',' FormalsPatternAfterDotDot)? |
  41. OptionalParensTypePattern (',' FormalsPattern)* |
  42. TypePattern '...'
  43. FormalsPatternAfterDotDot :=
  44. OptionalParensTypePattern (',' FormalsPatternAfterDotDot)* |
  45. TypePattern '...'
  46. ThrowsPattern := 'throws' TypePatternList
  47. TypePatternList := TypePattern (',' TypePattern)*
  48. -- constructor --
  49. ConstructorPattern :=
  50. AnnotationPattern? ConstructorModifiersPattern?
  51. (TypePattern DotOrDotDot)? 'new' '(' FormalsPattern ')'
  52. ThrowsPattern?
  53. ConstructorModifiersPattern := '!'? ConstructorModifier ConstructorModifiersPattern*
  54. ConstructorModifier := 'public' | 'private' | 'protected'
  55. === Pointcuts ===
  56. PointcutPrimitive :=
  57. Call | Execution | Get | Set | Handler |
  58. Initialization | PreInitialization |
  59. StaticInitialization | AdviceExecution |
  60. This | Target | Args | CFlow | CFlowBelow |
  61. Within | WithinCode | If |
  62. AnnotationPointcut
  63. AnnotationPointcut := AtAnnotation | AtThis | AtTarget |
  64. AtWithin | AtWithinCode | AtArgs
  65. Call := 'call' '(' MethodOrConstructorPattern ')'
  66. MethodOrConstructorPattern := MethodPattern | ConstructorPattern
  67. Execution := 'execution' '(' MethodOrConstructorPattern ')'
  68. Get := 'get' '(' FieldPattern ')'
  69. Set := 'set' '(' FieldPattern ')'
  70. Handler := 'handler' '(' OptionalParensTypePattern ')'
  71. Initialization := 'initialization' '(' ConstructorPattern ')'
  72. PreInitialization := 'preinitialization' '(' ConstructorPattern ')'
  73. StaticInitialization := 'staticinitialization' '(' OptionalParensTypePattern ')'
  74. AdviceExecution := 'adviceexecution' '(' ')'
  75. This := 'this' '(' TypeOrIdentifier ')'
  76. Target := 'target' '(' TypeOrIdentifier ')'
  77. Args := 'args' '(' FormalsOrIdentifiersPattern ')'
  78. CFlow := 'cflow' '(' Pointcut ')'
  79. CFlowBelow := 'cflowbelow' '(' Pointcut ')'
  80. Within := 'within' '(' OptionalParensTypePattern ')'
  81. WithinCode := 'withincode' '(' OptionalParensTypePattern ')'
  82. If := 'if' '(' BooleanJavaExpression ')'
  83. TypeOrIdentifier := FullyQualifiedName ('[' ']')* | Identifier
  84. Identifier := JavaIdentifierChar+
  85. FormalsOrIdentifiersPattern :=
  86. '..' (',' FormalsOrIdentifiersPatternAfterDotDot)? |
  87. TypeOrIdentifier (',' FormalsOrIdentifiersPattern)* |
  88. '*' (',' FormalsOrIdentifiersPattern)*
  89. FormalsOrIdentifiersPatternAfterDotDot :=
  90. TypeOrIdentifier (',' FormalsOrIdentifiersPatternAfterDotDot)* |
  91. '*' (',' FormalsOrIdentifiersPatternAfterDotDot)*
  92. AtAnnotation := '@annotation' '(' AnnotationOrIdentifier ')'
  93. AtThis := '@this' '(' AnnotationOrIdentifer ')'
  94. AtTarget := '@target' '(' AnnotationOrIdentifier ')'
  95. AtWithin := '@within' '(' AnnotationOrIdentifier ')'
  96. AtWithinCode := '@withincode' '(' AnnotationOrIdentifier ')'
  97. AnnotationOrIdentifier := FullyQualifiedName | Identifier
  98. AtArgs := '@args' '(' AnnotationsOrIdentifiersPattern ')'
  99. AnnotationsOrIdentifiersPattern :=
  100. '..' (',' AnnotationsOrIdentifiersPatternAfterDotDot)? |
  101. AnnotationOrIdentifier (',' AnnotationsOrIdentifiersPattern)* |
  102. '*' (',' AnnotationsOrIdentifiersPattern)*
  103. AnnotationsOrIdentifiersPatternAfterDotDot :=
  104. AnnotationOrIdentifier (',' AnnotationsOrIdentifiersPatternAfterDotDot)* |
  105. '*' (',' AnnotationsOrIdentifiersPatternAfterDotDot)*
  106. PointcutDeclaration := PointcutModifiers? 'pointcut' Identifier Formals
  107. ':' PointcutExpression
  108. PointcutModifiers := PointcutModifier*
  109. PointcutModifier := 'public' | 'private' | 'protected' | 'abstract'
  110. Formals := '(' ParamList? ')'
  111. ParamList := FullyQualifiedName Identifier (',' ParamList)*
  112. ReferencePointcut := (FullyQualifiedName '.')? Identifier Formals
  113. PointcutExpression := (PointcutPrimitive | ReferencePointcut) |
  114. '!' PointcutExpression |
  115. '(' PointcutExpression ')' |
  116. PointcutExpression '&&' PointcutExpression |
  117. PointcutExpression '||' PointcutExpression
  118. === Advice ===
  119. to be written...
  120. === Inter-type Declarations ===
  121. to be written...
  122. === Declare Statements ===
  123. to be written...
  124. === Aspects ===
  125. to be written...
  126. ]]></programlisting>
  127. </appendix>