%%%
 %% Pointcut Declarations
 %%
 %% @author  Martin Bravenboer <martin.bravenboer@gmail.com>
 %%%
module languages/aspectj/pointcut/Declaration[Ctx]
exports
  sorts
    PointcutDec
    PointcutDecBody
    PointcutDecHead

  context-free syntax
    PointcutDecHead PointcutBody -> PointcutDec {cons("PointcutDec")}

    %%%
     %% @todo What modifiers are allowed for a pointcut?
     %%%
    (Anno[[Ctx]] | Modifier[[Ctx]])* "pointcut" Id[[Ctx]] "(" {FormalParam[[Ctx]] ","}* ")"
      -> PointcutDecHead {cons("PointcutDecHead")}

    ":" PointcutExpr ";" -> PointcutBody {cons("PointcutBody")}
                     ";" -> PointcutBody {cons("NoPointcutBody")}