oscript.visitor
Class DepthFirstVisitor

java.lang.Object
  extended byoscript.visitor.DepthFirstVisitor
All Implemented Interfaces:
Visitor
Direct Known Subclasses:
TreeDumper, TreeFormatter

public class DepthFirstVisitor
extends java.lang.Object
implements Visitor

Provides default methods which visit each node in the tree in depth-first order. Your visitors may extend this class.


Constructor Summary
DepthFirstVisitor()
           
 
Method Summary
 void visit(AdditiveExpression n)
           f0 -> MultiplicativeExpression() f1 -> ( ( "+" | "-" ) MultiplicativeExpression() )*
 void visit(AllocationExpression n)
           f0 -> "new" f1 -> PrimaryExpressionWithTrailingFxnCallExpList() f2 -> FunctionCallExpressionList()
 void visit(Arglist n)
           f0 -> Permissions(false) f1 -> <IDENTIFIER> f2 -> ( "," Permissions(false) <IDENTIFIER> )* f3 -> ( "..." )?
 void visit(ArrayDeclarationPrimaryPrefix n)
           f0 -> "[" f1 -> ( FunctionCallExpressionListBody() )? f2 -> "]"
 void visit(ArraySubscriptPrimaryPostfix n)
           f0 -> "[" f1 -> Expression() f2 -> ( ".." Expression() )? f3 -> "]"
 void visit(AssignmentExpression n)
           f0 -> ConditionalExpression() f1 -> ( ( "=" | "+=" | "-=" | "*=" | "/=" | "%=" | ">>=" | "<<=" | ">>>=" | "&=" | "^=" | "|=" ) ConditionalExpression() )*
 void visit(BitwiseAndExpression n)
           f0 -> EqualityExpression() f1 -> ( "&" EqualityExpression() )*
 void visit(BitwiseOrExpression n)
           f0 -> BitwiseXorExpression() f1 -> ( "|" BitwiseXorExpression() )*
 void visit(BitwiseXorExpression n)
           f0 -> BitwiseAndExpression() f1 -> ( "^" BitwiseAndExpression() )*
 void visit(BreakStatement n)
           f0 -> "break" f1 -> ";"
 void visit(CalleePrimaryPrefix n)
           f0 -> "callee"
 void visit(CastExpression n)
           f0 -> "(" f1 -> PrimaryExpressionNotFunction() f2 -> ")" f3 -> PrimaryExpression()
 void visit(CollectionForLoopStatement n)
           f0 -> "for" f1 -> "(" f2 -> PreLoopStatement() f3 -> ":" f4 -> Expression() f5 -> ")" f6 -> EvaluationUnit()
 void visit(ConditionalExpression n)
           f0 -> LogicalOrExpression() f1 -> ( "?" LogicalOrExpression() ":" LogicalOrExpression() )?
 void visit(ConditionalStatement n)
           f0 -> "if" f1 -> "(" f2 -> Expression() f3 -> ")" f4 -> EvaluationUnit() f5 -> ( "else" EvaluationUnit() )?
 void visit(ContinueStatement n)
           f0 -> "continue" f1 -> ";"
 void visit(EqualityExpression n)
           f0 -> RelationalExpression() f1 -> ( ( "==" | "!=" ) RelationalExpression() )*
 void visit(EvalBlock n)
           f0 -> "eval" f1 -> Expression() f2 -> ";"
 void visit(EvaluationUnit n)
           f0 -> ScopeBlock() | VariableDeclarationBlock() | FunctionDeclaration() | TryStatement() | ForLoopStatement() | CollectionForLoopStatement() | WhileLoopStatement() | ConditionalStatement() | SynchronizedStatement() | ReturnStatement() | BreakStatement() | ContinueStatement() | ExpressionBlock() | ThrowBlock() | ImportBlock() | MixinBlock() | EvalBlock()
 void visit(Expression n)
           f0 -> AssignmentExpression() f1 -> ( "," AssignmentExpression() )*
 void visit(ExpressionBlock n)
           f0 -> Expression() f1 -> ";"
 void visit(ForLoopStatement n)
           f0 -> "for" f1 -> "(" f2 -> ( PreLoopStatement() )? f3 -> ";" f4 -> ( Expression() )? f5 -> ";" f6 -> ( Expression() )? f7 -> ")" f8 -> EvaluationUnit()
 void visit(FunctionCallExpressionList n)
           f0 -> "(" f1 -> ( FunctionCallExpressionListBody() )? f2 -> ")"
 void visit(FunctionCallExpressionListBody n)
           f0 -> AssignmentExpression() f1 -> ( "," AssignmentExpression() )*
 void visit(FunctionCallPrimaryPostfix n)
           f0 -> FunctionCallExpressionList()
 void visit(FunctionDeclaration n)
           f0 -> Permissions(true) f1 -> "function" f2 -> <IDENTIFIER> f3 -> "(" f4 -> ( Arglist() )? f5 -> ")" f6 -> ( "extends" PrimaryExpressionWithTrailingFxnCallExpList() FunctionCallExpressionList() )? f7 -> "{" f8 -> Program(true) f9 -> "}"
 void visit(FunctionPrimaryPrefix n)
           f0 -> "function" f1 -> "(" f2 -> ( Arglist() )? f3 -> ")" f4 -> ( "extends" PrimaryExpressionWithTrailingFxnCallExpList() FunctionCallExpressionList() )? f5 -> "{" f6 -> Program(true) f7 -> "}"
 void visit(IdentifierPrimaryPrefix n)
           f0 -> <IDENTIFIER>
 void visit(ImportBlock n)
           f0 -> "import" f1 -> Expression() f2 -> ";"
 void visit(Literal n)
           f0 -> <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <STRING_LITERAL> | <REGEXP_LITERAL> | "true" | "false" | "null" | "undefined"
 void visit(LogicalAndExpression n)
           f0 -> BitwiseOrExpression() f1 -> ( "&&" BitwiseOrExpression() )*
 void visit(LogicalOrExpression n)
           f0 -> LogicalAndExpression() f1 -> ( "||" LogicalAndExpression() )*
 void visit(MixinBlock n)
           f0 -> "mixin" f1 -> Expression() f2 -> ";"
 void visit(MultiplicativeExpression n)
           f0 -> UnaryExpression() f1 -> ( ( "*" | "/" | "%" ) UnaryExpression() )*
 void visit(NodeList n)
           
 void visit(NodeListOptional n)
           
 void visit(NodeOptional n)
           
 void visit(NodeSequence n)
           
 void visit(NodeToken n)
           
 void visit(ParenPrimaryPrefix n)
           f0 -> "(" f1 -> Expression() f2 -> ")"
 void visit(Permissions n)
           f0 -> ( "static" | "const" | "private" | "protected" | "public" )*
 void visit(PostfixExpression n)
           f0 -> TypeExpression() f1 -> ( "++" | "--" )?
 void visit(PreLoopStatement n)
           f0 -> VariableDeclaration() | Expression()
 void visit(PrimaryExpression n)
           f0 -> PrimaryPrefix() f1 -> ( PrimaryPostfix() )*
 void visit(PrimaryExpressionNotFunction n)
           f0 -> PrimaryPrefixNotFunction() f1 -> ( PrimaryPostfix() )*
 void visit(PrimaryExpressionWithTrailingFxnCallExpList n)
           f0 -> PrimaryPrefix() f1 -> ( PrimaryPostfixWithTrailingFxnCallExpList() )*
 void visit(PrimaryPostfix n)
           f0 -> FunctionCallPrimaryPostfix() | ArraySubscriptPrimaryPostfix() | PropertyIdentifierPrimaryPostfix()
 void visit(PrimaryPostfixWithTrailingFxnCallExpList n)
           f0 -> ArraySubscriptPrimaryPostfix() | PropertyIdentifierPrimaryPostfix()
 void visit(PrimaryPrefix n)
           f0 -> PrimaryPrefixNotFunction() | FunctionPrimaryPrefix() | ShorthandFunctionPrimaryPrefix()
 void visit(PrimaryPrefixNotFunction n)
           f0 -> ThisPrimaryPrefix() | CalleePrimaryPrefix() | ArrayDeclarationPrimaryPrefix() | IdentifierPrimaryPrefix() | ParenPrimaryPrefix() | Literal()
 void visit(Program n)
           f0 -> ( EvaluationUnit() )*
 void visit(ProgramFile n)
           f0 -> ( <UNIX_SELF_EXECUTABLE_COMMENT> )? f1 -> Program(false) f2 -> <EOF>
 void visit(PropertyIdentifierPrimaryPostfix n)
           f0 -> "." f1 -> <IDENTIFIER>
 void visit(RelationalExpression n)
           f0 -> ShiftExpression() f1 -> ( ( "<" | ">" | ">=" | "<=" | "instanceof" ) ShiftExpression() )*
 void visit(ReturnStatement n)
           f0 -> "return" f1 -> ( Expression() )? f2 -> ";"
 void visit(ScopeBlock n)
           f0 -> "{" f1 -> Program(false) f2 -> "}"
 void visit(ShiftExpression n)
           f0 -> AdditiveExpression() f1 -> ( ( "<<" | ">>" | ">>>" ) AdditiveExpression() )*
 void visit(ShorthandFunctionPrimaryPrefix n)
           f0 -> "'{" f1 -> Program(true) f2 -> "}"
 void visit(SynchronizedStatement n)
           f0 -> "synchronized" f1 -> "(" f2 -> Expression() f3 -> ")" f4 -> EvaluationUnit()
 void visit(ThisPrimaryPrefix n)
           f0 -> "this"
 void visit(ThrowBlock n)
           f0 -> "throw" f1 -> Expression() f2 -> ";"
 void visit(TryStatement n)
           f0 -> "try" f1 -> EvaluationUnit() f2 -> ( "catch" "(" Expression() <IDENTIFIER> ")" EvaluationUnit() )* f3 -> ( "catch" "(" <IDENTIFIER> ")" EvaluationUnit() )? f4 -> ( "finally" EvaluationUnit() )?
 void visit(TypeExpression n)
           f0 -> AllocationExpression() | CastExpression() | PrimaryExpression()
 void visit(UnaryExpression n)
           f0 -> ( ( "++" | "--" | "+" | "-" | "~" | "!" ) )? f1 -> PostfixExpression()
 void visit(VariableDeclaration n)
           f0 -> Permissions(true) f1 -> "var" f2 -> <IDENTIFIER> f3 -> ( "=" Expression() )?
 void visit(VariableDeclarationBlock n)
           f0 -> VariableDeclaration() f1 -> ";"
 void visit(WhileLoopStatement n)
           f0 -> "while" f1 -> "(" f2 -> Expression() f3 -> ")" f4 -> EvaluationUnit()
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DepthFirstVisitor

public DepthFirstVisitor()
Method Detail

visit

public void visit(NodeList n)
Specified by:
visit in interface Visitor

visit

public void visit(NodeListOptional n)
Specified by:
visit in interface Visitor

visit

public void visit(NodeOptional n)
Specified by:
visit in interface Visitor

visit

public void visit(NodeSequence n)
Specified by:
visit in interface Visitor

visit

public void visit(NodeToken n)
Specified by:
visit in interface Visitor

visit

public void visit(ProgramFile n)
 f0 -> ( <UNIX_SELF_EXECUTABLE_COMMENT> )?
 f1 -> Program(false)
 f2 -> <EOF>
 

Specified by:
visit in interface Visitor

visit

public void visit(Program n)
 f0 -> ( EvaluationUnit() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(EvaluationUnit n)
 f0 -> ScopeBlock()
       | VariableDeclarationBlock()
       | FunctionDeclaration()
       | TryStatement()
       | ForLoopStatement()
       | CollectionForLoopStatement()
       | WhileLoopStatement()
       | ConditionalStatement()
       | SynchronizedStatement()
       | ReturnStatement()
       | BreakStatement()
       | ContinueStatement()
       | ExpressionBlock()
       | ThrowBlock()
       | ImportBlock()
       | MixinBlock()
       | EvalBlock()
 

Specified by:
visit in interface Visitor

visit

public void visit(ScopeBlock n)
 f0 -> "{"
 f1 -> Program(false)
 f2 -> "}"
 

Specified by:
visit in interface Visitor

visit

public void visit(VariableDeclarationBlock n)
 f0 -> VariableDeclaration()
 f1 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(ExpressionBlock n)
 f0 -> Expression()
 f1 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(ThrowBlock n)
 f0 -> "throw"
 f1 -> Expression()
 f2 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(ImportBlock n)

 f0 -> "import"
 f1 -> Expression()
 f2 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(MixinBlock n)

 f0 -> "mixin"
 f1 -> Expression()
 f2 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(EvalBlock n)

 f0 -> "eval"
 f1 -> Expression()
 f2 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(VariableDeclaration n)

 f0 -> Permissions(true)
 f1 -> "var"
 f2 -> <IDENTIFIER>
 f3 -> ( "=" Expression() )?
 

Specified by:
visit in interface Visitor

visit

public void visit(FunctionDeclaration n)

 f0 -> Permissions(true)
 f1 -> "function"
 f2 -> <IDENTIFIER>
 f3 -> "("
 f4 -> ( Arglist() )?
 f5 -> ")"
 f6 -> ( "extends" PrimaryExpressionWithTrailingFxnCallExpList() FunctionCallExpressionList() )?
 f7 -> "{"
 f8 -> Program(true)
 f9 -> "}"
 

Specified by:
visit in interface Visitor

visit

public void visit(Arglist n)
 f0 -> Permissions(false)
 f1 -> <IDENTIFIER>
 f2 -> ( "," Permissions(false) <IDENTIFIER> )*
 f3 -> ( "..." )?
 

Specified by:
visit in interface Visitor

visit

public void visit(TryStatement n)
 f0 -> "try"
 f1 -> EvaluationUnit()
 f2 -> ( "catch" "(" Expression() <IDENTIFIER> ")" EvaluationUnit() )*
 f3 -> ( "catch" "(" <IDENTIFIER> ")" EvaluationUnit() )?
 f4 -> ( "finally" EvaluationUnit() )?
 

Specified by:
visit in interface Visitor

visit

public void visit(ForLoopStatement n)

 f0 -> "for"
 f1 -> "("
 f2 -> (  PreLoopStatement() )?
 f3 -> ";"
 f4 -> ( Expression() )?
 f5 -> ";"
 f6 -> ( Expression() )?
 f7 -> ")"
 f8 -> EvaluationUnit()
 

Specified by:
visit in interface Visitor

visit

public void visit(CollectionForLoopStatement n)

 f0 -> "for"
 f1 -> "("
 f2 -> PreLoopStatement()
 f3 -> ":"
 f4 -> Expression()
 f5 -> ")"
 f6 -> EvaluationUnit()
 

Specified by:
visit in interface Visitor

visit

public void visit(PreLoopStatement n)
 f0 -> VariableDeclaration()
       | Expression()
 

Specified by:
visit in interface Visitor

visit

public void visit(WhileLoopStatement n)
 f0 -> "while"
 f1 -> "("
 f2 -> Expression()
 f3 -> ")"
 f4 -> EvaluationUnit()
 

Specified by:
visit in interface Visitor

visit

public void visit(ConditionalStatement n)
 f0 -> "if"
 f1 -> "("
 f2 -> Expression()
 f3 -> ")"
 f4 -> EvaluationUnit()
 f5 -> ( "else" EvaluationUnit() )?
 

Specified by:
visit in interface Visitor

visit

public void visit(SynchronizedStatement n)
 f0 -> "synchronized"
 f1 -> "("
 f2 -> Expression()
 f3 -> ")"
 f4 -> EvaluationUnit()
 

Specified by:
visit in interface Visitor

visit

public void visit(ReturnStatement n)
 f0 -> "return"
 f1 -> ( Expression() )?
 f2 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(BreakStatement n)
 f0 -> "break"
 f1 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(ContinueStatement n)
 f0 -> "continue"
 f1 -> ";"
 

Specified by:
visit in interface Visitor

visit

public void visit(Expression n)
 f0 -> AssignmentExpression()
 f1 -> ( "," AssignmentExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(FunctionCallExpressionList n)
 f0 -> "("
 f1 -> ( FunctionCallExpressionListBody() )?
 f2 -> ")"
 

Specified by:
visit in interface Visitor

visit

public void visit(FunctionCallExpressionListBody n)
 f0 -> AssignmentExpression()
 f1 -> ( "," AssignmentExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(AssignmentExpression n)
 f0 -> ConditionalExpression()
 f1 -> ( ( "=" | "+=" | "-=" | "*=" | "/=" | "%=" | ">>=" | "<<=" | ">>>=" | "&=" | "^=" | "|=" ) ConditionalExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(ConditionalExpression n)
 f0 -> LogicalOrExpression()
 f1 -> ( "?" LogicalOrExpression() ":" LogicalOrExpression() )?
 

Specified by:
visit in interface Visitor

visit

public void visit(LogicalOrExpression n)
 f0 -> LogicalAndExpression()
 f1 -> ( "||" LogicalAndExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(LogicalAndExpression n)
 f0 -> BitwiseOrExpression()
 f1 -> ( "&&" BitwiseOrExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(BitwiseOrExpression n)
 f0 -> BitwiseXorExpression()
 f1 -> ( "|" BitwiseXorExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(BitwiseXorExpression n)
 f0 -> BitwiseAndExpression()
 f1 -> ( "^" BitwiseAndExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(BitwiseAndExpression n)
 f0 -> EqualityExpression()
 f1 -> ( "&" EqualityExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(EqualityExpression n)
 f0 -> RelationalExpression()
 f1 -> ( ( "==" | "!=" ) RelationalExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(RelationalExpression n)
 f0 -> ShiftExpression()
 f1 -> ( ( "<" | ">" | ">=" | "<=" | "instanceof" ) ShiftExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(ShiftExpression n)
 f0 -> AdditiveExpression()
 f1 -> ( ( "<<" | ">>" | ">>>" ) AdditiveExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(AdditiveExpression n)
 f0 -> MultiplicativeExpression()
 f1 -> ( ( "+" | "-" ) MultiplicativeExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(MultiplicativeExpression n)
 f0 -> UnaryExpression()
 f1 -> ( ( "*" | "/" | "%" ) UnaryExpression() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(UnaryExpression n)
 f0 -> ( ( "++" | "--" | "+" | "-" | "~" | "!" ) )?
 f1 -> PostfixExpression()
 

Specified by:
visit in interface Visitor

visit

public void visit(PostfixExpression n)
 f0 -> TypeExpression()
 f1 -> ( "++" | "--" )?
 

Specified by:
visit in interface Visitor

visit

public void visit(TypeExpression n)
 f0 -> AllocationExpression()
       | CastExpression()
       | PrimaryExpression()
 

Specified by:
visit in interface Visitor

visit

public void visit(AllocationExpression n)
 f0 -> "new"
 f1 -> PrimaryExpressionWithTrailingFxnCallExpList()
 f2 -> FunctionCallExpressionList()
 

Specified by:
visit in interface Visitor

visit

public void visit(CastExpression n)
 f0 -> "("
 f1 -> PrimaryExpressionNotFunction()
 f2 -> ")"
 f3 -> PrimaryExpression()
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryExpression n)
 f0 -> PrimaryPrefix()
 f1 -> ( PrimaryPostfix() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryExpressionNotFunction n)
 f0 -> PrimaryPrefixNotFunction()
 f1 -> ( PrimaryPostfix() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryExpressionWithTrailingFxnCallExpList n)
 f0 -> PrimaryPrefix()
 f1 -> ( PrimaryPostfixWithTrailingFxnCallExpList() )*
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryPrefix n)
 f0 -> PrimaryPrefixNotFunction()
       | FunctionPrimaryPrefix()
       | ShorthandFunctionPrimaryPrefix()
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryPrefixNotFunction n)
 f0 -> ThisPrimaryPrefix()
       | CalleePrimaryPrefix()
       | ArrayDeclarationPrimaryPrefix()
       | IdentifierPrimaryPrefix()
       | ParenPrimaryPrefix()
       | Literal()
 

Specified by:
visit in interface Visitor

visit

public void visit(ThisPrimaryPrefix n)
 f0 -> "this"
 

Specified by:
visit in interface Visitor

visit

public void visit(CalleePrimaryPrefix n)

 f0 -> "callee"
 

Specified by:
visit in interface Visitor

visit

public void visit(IdentifierPrimaryPrefix n)
 f0 -> <IDENTIFIER>
 

Specified by:
visit in interface Visitor

visit

public void visit(ParenPrimaryPrefix n)
 f0 -> "("
 f1 -> Expression()
 f2 -> ")"
 

Specified by:
visit in interface Visitor

visit

public void visit(FunctionPrimaryPrefix n)

 f0 -> "function"
 f1 -> "("
 f2 -> ( Arglist() )?
 f3 -> ")"
 f4 -> ( "extends" PrimaryExpressionWithTrailingFxnCallExpList() FunctionCallExpressionList() )?
 f5 -> "{"
 f6 -> Program(true)
 f7 -> "}"
 

Specified by:
visit in interface Visitor

visit

public void visit(ShorthandFunctionPrimaryPrefix n)

 f0 -> "'{"
 f1 -> Program(true)
 f2 -> "}"
 

Specified by:
visit in interface Visitor

visit

public void visit(ArrayDeclarationPrimaryPrefix n)
 f0 -> "["
 f1 -> ( FunctionCallExpressionListBody() )?
 f2 -> "]"
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryPostfix n)
 f0 -> FunctionCallPrimaryPostfix()
       | ArraySubscriptPrimaryPostfix()
       | PropertyIdentifierPrimaryPostfix()
 

Specified by:
visit in interface Visitor

visit

public void visit(PrimaryPostfixWithTrailingFxnCallExpList n)
 f0 -> ArraySubscriptPrimaryPostfix()
       | PropertyIdentifierPrimaryPostfix()
 

Specified by:
visit in interface Visitor

visit

public void visit(FunctionCallPrimaryPostfix n)
 f0 -> FunctionCallExpressionList()
 

Specified by:
visit in interface Visitor

visit

public void visit(ArraySubscriptPrimaryPostfix n)
 f0 -> "["
 f1 -> Expression()
 f2 -> ( ".." Expression() )?
 f3 -> "]"
 

Specified by:
visit in interface Visitor

visit

public void visit(PropertyIdentifierPrimaryPostfix n)
 f0 -> "."
 f1 -> <IDENTIFIER>
 

Specified by:
visit in interface Visitor

visit

public void visit(Literal n)
 f0 -> <INTEGER_LITERAL>
       | <FLOATING_POINT_LITERAL>
       | <STRING_LITERAL>
       | <REGEXP_LITERAL>
       | "true"
       | "false"
       | "null"
       | "undefined"
 

Specified by:
visit in interface Visitor

visit

public void visit(Permissions n)

 f0 -> ( "static" | "const" | "private" | "protected" | "public" )*
 

Specified by:
visit in interface Visitor