ShockScript: Type expressions

Syntax

    TypeExpression :
      NonPrefixedTypeExpression
      ? NonPrefixedTypeExpression
    TypeExpressionList :
      TypeExpression
      TypeExpressionList , TypeExpression
    NonPrefixedTypeExpression :
      *
      this
      void
      null
      [lookahead ≠ ( ] QualifiedIdentifier
      ( TypeExpression )
      ( TypeExpression , TypeExpressionList )
      TupleTypeExpression
      RecordTypeExpression
      FunctionTypeExpression
      NonPrefixedTypeExpression PropertyOperator
      NonPrefixedTypeExpression [lookahead = . ] QueryOperator
      NonPrefixedTypeExpression TypeArguments
      NonPrefixedTypeExpression NonNull
      NonPrefixedTypeExpression ?
    TupleTypeExpression :
      [ TypeExpression ]
      [ TypeExpression , TypeExpressionList ]
      [ TypeExpression , TypeExpressionList , ]
    RecordTypeExpression :
      {}
      { RecordTypeItemList }
    RecordTypeItemList :
      RecordTypeField
      RecordTypeField , RecordTypeItemList
      ... TypeExpression
    RecordTypeField :
      NonAttributeQualifiedIdentifier : TypeExpression
    FunctionTypeExpression :
      function ( ) : TypeExpression
      function ( FunctionTypeParameterList ) : TypeExpression
    FunctionTypeParameterList :
      FunctionTypeParameter
      FunctionTypeParameterList , FunctionTypeParameter
    FunctionTypeParameter :
      ... TypeExpressionopt
      TypeExpression [lookahead ≠ = ]
      TypeExpression =
    TypeArguments :
      . < TypeArgumentsList GenericGreaterThan
    GenericGreaterThan :
      >
      first greater-than > from the offending token
    TypeArgumentsList :
      TypeExpression
      TypeArgumentsList , TypeExpression