# Simple class A {int(3) a[3];} ==> Specification( ClassDeclaration( class Whitespace Identifier Whitespace OpenBrace ArrayDefinition( ElementaryType( int ) LengthAttribute( OpenParenthesis UnaryExpression( IntegerLiteral ) CloseParenthesis ) Whitespace Identifier ExplicitArrayDimension( OpenBracket UnaryExpression( IntegerLiteral ) CloseBracket ) Semicolon ) CloseBrace ) ) # Reserved multiple dimensions with mixed explicit and partial dimensions class A {reserved MyClass a[3][[2]];} ==> Specification( ClassDeclaration( class Whitespace Identifier Whitespace OpenBrace ArrayDefinition( reserved Whitespace Identifier Whitespace Identifier ExplicitArrayDimension( OpenBracket UnaryExpression( IntegerLiteral ) CloseBracket ) PartialArrayDimension( OpenBracket OpenBracket UnaryExpression( IntegerLiteral ) CloseBracket CloseBracket ) Semicolon ) CloseBrace ) ) # Implicit dimension class A {MyClass a[1..3];} ==> Specification( ClassDeclaration( class Whitespace Identifier Whitespace OpenBrace ArrayDefinition( Identifier Whitespace Identifier ImplicitArrayDimension( OpenBracket IntegerLiteral RangeOperator IntegerLiteral CloseBracket ) Semicolon ) CloseBrace ) )